home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 12 / Cream of the Crop 12 (Part II) / Cream of the Crop 12 (Part II).iso / OS2 / DIKUMUD.ZIP / SPELL_PA.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-30  |  79.6 KB  |  2,338 lines

  1. /*
  2.   SillyMUD Distribution V1.1b             (c) 1993 SillyMUD Developement
  3.  
  4.   See license.doc for distribution terms.   SillyMUD is based on DIKUMUD
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <assert.h>
  9.  
  10. #include "protos.h"
  11.  
  12. #define MANA_MU 1
  13. #define MANA_CL 1
  14.  
  15.  
  16. #define SPELLO(nr, beat, pos, mlev, clev, dlev, mana, tar, func, sf) { \
  17.                  spell_info[nr].spell_pointer = (func);    \
  18.                spell_info[nr].beats = (beat);            \
  19.                spell_info[nr].minimum_position = (pos);  \
  20.                spell_info[nr].min_usesmana = (mana);     \
  21.                spell_info[nr].min_level_cleric = (clev); \
  22.                spell_info[nr].min_level_magic = (mlev);  \
  23.            spell_info[nr].min_level_druid = (dlev);  \
  24.                spell_info[nr].targets = (tar);           \
  25.            spell_info[nr].spellfail = (sf);          \
  26.            }
  27.  
  28.  
  29.  
  30. /* 100 is the MAX_MANA for a character */
  31. #define USE_MANA(ch, sn) \
  32.   MAX((int)spell_info[sn].min_usesmana, 100/MAX(2,(2+GET_LEVEL(ch, BestMagicClass(ch))-SPELL_LEVEL(ch,sn))))
  33.  
  34. #define SPELL_MEMORIZED 2
  35.  
  36. #define MEMORIZED(ch, spl) ((ch)->skills[spl].flags & SPELL_MEMORIZED)
  37. #define FORGET(ch, spl) (IS_SET((ch)->skills[spl].flags, SPELL_MEMORIZED))
  38.  
  39. /* Global data */
  40.  
  41. extern struct room_data *world;
  42. extern struct char_data *character_list;
  43. extern char *spell_wear_off_msg[];
  44. extern char *spell_wear_off_soon_msg[];
  45. extern char *spell_wear_off_room_msg[];
  46. extern char *spell_wear_off_soon_room_msg[];
  47. extern struct obj_data *object_list;
  48. extern struct index_data *obj_index;
  49.  
  50. /*  internal procedures */
  51. void SpellWearOffSoon(int s, struct char_data *ch);
  52. void check_drowning( struct char_data *ch);
  53. int check_falling( struct char_data *ch);
  54. void check_decharm( struct char_data *ch);
  55. void SpellWearOff(int s, struct char_data *ch);
  56.  
  57.  
  58.  
  59. /* Extern procedures */
  60.  
  61. char *strdup(char *str);
  62.  
  63. void NailThisSucker( struct char_data *ch);
  64. void do_look( struct char_data *ch, char *arg, int cmd);
  65. void DamageAllStuff( struct char_data *ch, int dam_type);
  66.  
  67.  
  68. /* Extern procedures */
  69. void cast_animate_dead( byte level, struct char_data *ch, char *arg, int type,
  70.                struct char_data *tar_ch, struct obj_data *tar_obj );
  71. void cast_conjure_elemental( byte level, struct char_data *ch, char *arg, 
  72.                 int type, struct char_data *tar_ch, struct obj_data *tar_obj );
  73. void cast_acid_blast( byte level, struct char_data *ch, char *arg, int type,
  74.              struct char_data *tar_ch, struct obj_data *tar_obj );
  75. void cast_armor( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  76. void cast_teleport( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  77. void cast_bless( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  78. void cast_blindness( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  79. void cast_burning_hands( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  80. void cast_call_lightning( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  81. void cast_charm_person( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  82. void cast_charm_monster( byte level, struct char_data *ch, char *arg, int si, 
  83.             struct char_data *tar_ch, struct obj_data *tar_obj);
  84. void cast_cacaodemon( byte level, struct char_data *ch, char *arg, int si, 
  85.             struct char_data *tar_ch, struct obj_data *tar_obj);
  86.  
  87. void cast_chill_touch( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  88. void cast_shocking_grasp( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  89. void cast_clone( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  90. void cast_colour_spray( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  91. void cast_control_weather( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  92. void cast_create_food( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  93. void cast_create_water( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  94. void cast_cure_blind( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  95. void cast_cure_critic( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  96. void cast_cause_critic( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  97. void cast_cure_light( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  98. void cast_cause_light( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  99. void cast_curse( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  100. void cast_cont_light( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, 
  101.              struct obj_data *tar_obj);
  102. void cast_calm( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, 
  103.            struct obj_data *tar_obj);
  104. void cast_detect_evil( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  105. void cast_detect_invisibility( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  106. void cast_detect_magic( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  107. void cast_detect_poison( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  108. void cast_dispel_evil( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  109. void cast_dispel_good( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  110. void cast_dispel_magic( byte level, struct char_data *ch, char *arg, int type,
  111.                struct char_data *tar_ch, struct obj_data *tar_obj );
  112. void cast_earthquake( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  113. void cast_enchant_weapon( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  114. void cast_energy_drain( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  115. void cast_fear( byte level, struct char_data *ch, char *arg, int type,
  116.            struct char_data *tar_ch, struct obj_data *tar_obj );
  117. void cast_fireball( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  118. void cast_flamestrike( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  119. void cast_flying( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  120. void cast_flying( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  121.  
  122. void cast_harm( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  123. void cast_heal( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  124. void cast_infravision( byte level, struct char_data *ch, char *arg, int type, struct char_data *tar_ch, struct obj_data *tar_obj );
  125. void cast_invisibility( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  126. void cast_cone_of_cold( byte level, struct char_data *ch, char *arg, int type,
  127.                struct char_data *tar_ch, struct obj_data *tar_obj );
  128. void cast_ice_storm( byte level, struct char_data *ch, char *arg, int type,
  129.             struct char_data *tar_ch, struct obj_data *tar_obj );
  130. void cast_knock( byte level, struct char_data *ch, char *arg, int type,
  131.         struct char_data *tar_ch, struct obj_data *tar_obj );
  132. void cast_know_alignment(byte level, struct char_data *ch, char *arg, int type,
  133.              struct char_data *tar_ch, struct obj_data *tar_obj );
  134. void cast_true_seeing(byte level, struct char_data *ch, char *arg, int type,
  135.              struct char_data *tar_ch, struct obj_data *tar_obj );
  136. void cast_minor_creation(byte level, struct char_data *ch, char *arg, int type,
  137.              struct char_data *tar_ch, struct obj_data *tar_obj );
  138. void cast_faerie_fire(byte level, struct char_data *ch, char *arg, int type,
  139.              struct char_data *tar_ch, struct obj_data *tar_obj );
  140. void cast_faerie_fog(byte level, struct char_data *ch, char *arg, int type,
  141.              struct char_data *tar_ch, struct obj_data *tar_obj );
  142. void cast_heroes_feast(byte level, struct char_data *ch, char *arg, int type,
  143.              struct char_data *tar_ch, struct obj_data *tar_obj );
  144. void cast_fly_group(byte level, struct char_data *ch, char *arg, int type,
  145.              struct char_data *tar_ch, struct obj_data *tar_obj );
  146. void cast_web(byte level, struct char_data *ch, char *arg, int type,
  147.              struct char_data *tar_ch, struct obj_data *tar_obj );
  148. void cast_minor_track(byte level, struct char_data *ch, char *arg, int type,
  149.              struct char_data *tar_ch, struct obj_data *tar_obj );
  150. void cast_major_track(byte level, struct char_data *ch, char *arg, int type,
  151.              struct char_data *tar_ch, struct obj_data *tar_obj );
  152. void cast_mana(byte level, struct char_data *ch, char *arg, int type,
  153.              struct char_data *tar_ch, struct obj_data *tar_obj );
  154.  
  155.  
  156.  
  157. void cast_lightning_bolt( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  158. void cast_light( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, 
  159.         struct obj_data *tar_obj);
  160. void cast_locate_object( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  161. void cast_magic_missile( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  162.  
  163. void cast_mon_sum1( byte level, struct char_data *ch, char *arg, int si, 
  164.            struct char_data *tar_ch, struct obj_data *tar_obj);
  165. void cast_mon_sum2( byte level, struct char_data *ch, char *arg, int si, 
  166.            struct char_data *tar_ch, struct obj_data *tar_obj);
  167. void cast_mon_sum3( byte level, struct char_data *ch, char *arg, int si, 
  168.            struct char_data *tar_ch, struct obj_data *tar_obj);
  169. void cast_mon_sum4( byte level, struct char_data *ch, char *arg, int si, 
  170.            struct char_data *tar_ch, struct obj_data *tar_obj);
  171. void cast_mon_sum5( byte level, struct char_data *ch, char *arg, int si, 
  172.            struct char_data *tar_ch, struct obj_data *tar_obj);
  173. void cast_mon_sum6( byte level, struct char_data *ch, char *arg, int si, 
  174.            struct char_data *tar_ch, struct obj_data *tar_obj);
  175. void cast_mon_sum7( byte level, struct char_data *ch, char *arg, int si, 
  176.            struct char_data *tar_ch, struct obj_data *tar_obj);
  177.  
  178. void cast_meteor_swarm( byte level, struct char_data *ch, char *arg, int si, 
  179.                struct char_data *tar_ch, struct obj_data *tar_obj);
  180.  
  181. void cast_poly_self( byte level, struct char_data *ch, char *arg, int si, 
  182.          struct char_data *tar_ch, struct obj_data *tar_obj);
  183. void cast_change_form( byte level, struct char_data *ch, char *arg, int si, 
  184.          struct char_data *tar_ch, struct obj_data *tar_obj);
  185.  
  186. void cast_poison( byte level, struct char_data *ch, char *arg, int si, 
  187.          struct char_data *tar_ch, struct obj_data *tar_obj);
  188.  
  189. void cast_protection_from_evil( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  190. void cast_remove_curse( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  191. void cast_sanctuary( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  192. void cast_sleep( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  193. void cast_strength( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  194. void cast_stone_skin( byte level, struct char_data *ch, char *arg, int si, 
  195.              struct char_data *tar_ch, struct obj_data *tar_obj);
  196. void cast_summon( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  197. void cast_ventriloquate( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  198. void cast_word_of_recall( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  199.  
  200. void cast_water_breath( byte level, struct char_data *ch, char *arg, int si, 
  201.                struct char_data *tar_ch, struct obj_data *tar_obj);
  202.  
  203. void cast_remove_poison( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  204. void cast_remove_paralysis( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  205. void cast_weakness( byte level, struct char_data *ch, char *arg, int type,
  206.            struct char_data *tar_ch, struct obj_data *tar_obj );
  207. void cast_sense_life( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  208. void cast_identify( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  209. void cast_paralyze( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  210.  
  211. void cast_dragon_breath( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *potion);
  212. void cast_fireshield( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  213. void cast_cure_serious( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  214. void cast_cause_serious( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  215. void cast_refresh( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  216. void cast_second_wind( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  217. void cast_shield( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  218.  
  219. void cast_turn( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  220.  
  221. void cast_succor( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  222. void cast_astral_walk( byte level, struct char_data *ch, char *arg, int si, struct char_data *tar_ch, struct obj_data *tar_obj);
  223. void cast_resurrection( byte level, struct char_data *ch, char *arg, int si,
  224. struct char_data *tar_ch, struct obj_data *tar_obj);
  225.  
  226.  
  227. void cast_tree_travel( byte level, struct char_data *ch, char *arg, int type,
  228.                        struct char_data *tar_ch, struct obj_data *tar_obj);
  229. void cast_haste( byte level, struct char_data *ch, char *arg, int type,
  230.                        struct char_data *tar_ch, struct obj_data *tar_obj);
  231. void cast_slow( byte level, struct char_data *ch, char *arg, int type,
  232.                        struct char_data *tar_ch, struct obj_data *tar_obj);
  233. void cast_speak_with_plants( byte level, struct char_data *ch, char *arg, 
  234.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  235.  
  236.  
  237. void cast_transport_via_plant( byte level, struct char_data *ch, char *arg, 
  238.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  239.  
  240.  
  241.  
  242.  
  243. void cast_changestaff( byte level, struct char_data *ch, char *arg, 
  244.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  245.  
  246. void cast_holyword( byte level, struct char_data *ch, char *arg, 
  247.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  248.  
  249. void cast_unholyword( byte level, struct char_data *ch, char *arg, 
  250.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  251.  
  252. void cast_aid( byte level, struct char_data *ch, char *arg, 
  253.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  254.  
  255. void cast_golem( byte level, struct char_data *ch, char *arg, 
  256.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  257.  
  258. void cast_familiar( byte level, struct char_data *ch, char *arg, 
  259.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  260.  
  261. void cast_pword_kill( byte level, struct char_data *ch, char *arg, 
  262.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  263.  
  264. void cast_pword_blind( byte level, struct char_data *ch, char *arg, 
  265.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  266.  
  267. void cast_command( byte level, struct char_data *ch, char *arg, 
  268.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  269.  
  270. void cast_scare( byte level, struct char_data *ch, char *arg, 
  271.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  272.  
  273. void cast_chain_lightn( byte level, struct char_data *ch, char *arg, 
  274.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  275.  
  276. void cast_reincarnate( byte level, struct char_data *ch, char *arg, 
  277.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  278. void cast_feeblemind( byte level, struct char_data *ch, char *arg, 
  279.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  280. void cast_shillelagh( byte level, struct char_data *ch, char *arg, 
  281.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  282. void cast_goodberry( byte level, struct char_data *ch, char *arg, 
  283.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  284. void cast_flame_blade( byte level, struct char_data *ch, char *arg, 
  285.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  286. void cast_animal_growth( byte level, struct char_data *ch, char *arg, 
  287.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  288. void cast_insect_growth( byte level, struct char_data *ch, char *arg, 
  289.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  290. void cast_creeping_death( byte level, struct char_data *ch, char *arg, 
  291.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  292. void cast_commune( byte level, struct char_data *ch, char *arg, 
  293.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  294.  
  295.  
  296. void cast_animal_summon_1( byte level, struct char_data *ch, char *arg, 
  297.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  298. void cast_animal_summon_2( byte level, struct char_data *ch, char *arg, 
  299.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  300. void cast_animal_summon_3( byte level, struct char_data *ch, char *arg, 
  301.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  302.  
  303. void cast_fire_servant( byte level, struct char_data *ch, char *arg, 
  304.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  305. void cast_earth_servant( byte level, struct char_data *ch, char *arg, 
  306.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  307. void cast_water_servant( byte level, struct char_data *ch, char *arg, 
  308.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  309. void cast_wind_servant( byte level, struct char_data *ch, char *arg, 
  310.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  311.  
  312.  
  313. void cast_charm_veggie( byte level, struct char_data *ch, char *arg, 
  314.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  315. void cast_veggie_growth( byte level, struct char_data *ch, char *arg, 
  316.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  317. void cast_tree( byte level, struct char_data *ch, char *arg, 
  318.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  319.  
  320. void cast_animate_rock( byte level, struct char_data *ch, char *arg, 
  321.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  322. void cast_travelling( byte level, struct char_data *ch, char *arg, 
  323.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  324. void cast_animal_friendship( byte level, struct char_data *ch, char *arg, 
  325.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  326. void cast_invis_to_animals( byte level, struct char_data *ch, char *arg, 
  327.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  328. void cast_slow_poison( byte level, struct char_data *ch, char *arg, 
  329.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  330. void cast_entangle( byte level, struct char_data *ch, char *arg, 
  331.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  332. void cast_snare( byte level, struct char_data *ch, char *arg, 
  333.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  334.  
  335. void cast_gust_of_wind( byte level, struct char_data *ch, char *arg, 
  336.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  337.  
  338. void cast_barkskin( byte level, struct char_data *ch, char *arg, 
  339.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  340.  
  341. void cast_sunray( byte level, struct char_data *ch, char *arg, 
  342.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  343. void cast_heat_stuff( byte level, struct char_data *ch, char *arg, 
  344.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  345. void cast_warp_weapon( byte level, struct char_data *ch, char *arg, 
  346.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  347. void cast_find_traps( byte level, struct char_data *ch, char *arg, 
  348.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  349. void cast_firestorm( byte level, struct char_data *ch, char *arg, 
  350.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  351. void cast_dust_devil( byte level, struct char_data *ch, char *arg, 
  352.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  353. void cast_know_monster( byte level, struct char_data *ch, char *arg, 
  354.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  355.  
  356. void cast_silence( byte level, struct char_data *ch, char *arg, 
  357.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  358.  
  359.  
  360. void cast_sending( byte level, struct char_data *ch, char *arg, 
  361.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  362. void cast_teleport_wo_error( byte level, struct char_data *ch, char *arg, 
  363.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  364. void cast_portal( byte level, struct char_data *ch, char *arg, 
  365.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  366. void cast_dragon_ride( byte level, struct char_data *ch, char *arg, 
  367.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  368. void cast_mount( byte level, struct char_data *ch, char *arg, 
  369.         int type,  struct char_data *tar_ch, struct obj_data *tar_obj);
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377. struct spell_info_type spell_info[MAX_SPL_LIST];
  378.  
  379. char *spells[]=
  380. {
  381.    "armor",               /* 1 */
  382.    "teleport",
  383.    "bless",
  384.    "blindness",
  385.    "burning hands",
  386.    "call lightning",
  387.    "charm person",
  388.    "chill touch",
  389.    "clone",
  390.    "colour spray",
  391.    "control weather",     /* 11 */
  392.    "create food",
  393.    "create water",
  394.    "cure blind",
  395.    "cure critic",
  396.    "cure light",
  397.    "curse",
  398.    "detect evil",
  399.    "detect invisibility",
  400.    "detect magic",
  401.    "detect poison",       /* 21 */
  402.    "dispel evil",
  403.    "earthquake",
  404.    "enchant weapon",
  405.    "energy drain",
  406.    "fireball",
  407.    "harm",
  408.    "heal",
  409.    "invisibility",
  410.    "lightning bolt",
  411.    "locate object",      /* 31 */
  412.    "magic missile",
  413.    "poison",
  414.    "protection from evil",
  415.    "remove curse",
  416.    "sanctuary",
  417.    "shocking grasp",
  418.    "sleep",
  419.    "strength",
  420.    "summon",
  421.    "ventriloquate",      /* 41 */
  422.    "word of recall",
  423.    "remove poison",
  424.    "sense life",         /* 44 */
  425.  
  426.    /* RESERVED SKILLS */
  427.    "sneak",        /* 45 */
  428.    "hide",
  429.    "steal",
  430.    "backstab",
  431.    "pick",
  432.    "kick",         /* 50 */
  433.    "bash",
  434.    "rescue",
  435.    /* NON-CASTABLE SPELLS (Scrolls/potions/wands/staffs) */
  436.  
  437.    "identify",           /* 53 */
  438.    "infravision",        
  439.    "cause light",        
  440.    "cause critical",
  441.    "flamestrike",
  442.    "dispel good",      
  443.    "weakness",
  444.    "dispel magic",
  445.    "knock",
  446.    "know alignment",
  447.    "animate dead",
  448.    "paralyze",
  449.    "remove paralysis",
  450.    "fear",
  451.    "acid blast",  /* 67 */
  452.    "water breath",
  453.    "fly",
  454.    "cone of cold",   /* 70 */
  455.    "meteor swarm",
  456.    "ice storm",
  457.    "shield",
  458.    "monsum one",
  459.    "monsum two",
  460.    "monsum three",
  461.    "monsum four",
  462.    "monsum five",
  463.    "monsum six",
  464.    "monsum seven",  /* 80 */
  465.    "fireshield",
  466.    "charm monster",
  467.    "cure serious",
  468.    "cause serious",
  469.    "refresh",
  470.    "second wind",
  471.    "turn",
  472.    "succor",
  473.    "create light",
  474.    "continual light",    /* 90 */
  475.    "calm",
  476.    "stone skin",
  477.    "conjure elemental",
  478.    "true sight",
  479.    "minor creation",
  480.    "faerie fire",
  481.    "faerie fog",
  482.    "cacaodemon",
  483.    "polymorph self",
  484.    "mana",    /* 100 */
  485.    "astral walk",
  486.    "resurrection",
  487.    "heroes feast",  /* 103 */
  488.    "group fly",
  489.    "breath",
  490.    "web",
  491.    "minor track",
  492.    "major track",
  493.    "golem",
  494.    "find familiar",    /* 110 */
  495.    "changestaff",
  496.    "holy word",
  497.    "unholy word",
  498.    "power word kill",
  499.    "power word blind",
  500.    "chain lightning",
  501.    "scare",
  502.    "aid",
  503.    "command",
  504.    "change form",    /* 120 */
  505.    "feeblemind",
  506.    "shillelagh",
  507.    "goodberry",
  508.    "flame blade",
  509.    "animal growth",
  510.    "insect growth",
  511.    "creeping death",
  512.    "commune",
  513.    "animal summon one",
  514.    "animal summon two",    /* 130 */
  515.    "animal summon three",
  516.    "fire servant",
  517.    "earth servant",
  518.    "water servant",
  519.    "wind servant",
  520.    "reincarnate",
  521.    "charm vegatable",
  522.    "vegetable growth",
  523.    "tree",
  524.    "animate rock",    /* 140 */
  525.    "tree travel",
  526.    "travelling",
  527.    "animal friendship",
  528.    "invis to animals",
  529.    "slow poison",
  530.    "entangle",
  531.    "snare",
  532.    "gust of wind",
  533.    "barkskin",
  534.    "sunray",    /* 150 */
  535.    "warp weapon",
  536.    "heat stuff",
  537.    "find traps",
  538.    "firestorm",
  539.    "haste",
  540.    "slowness",
  541.    "dust devil",
  542.    "know monster",
  543.    "transport via plant",
  544.    "speak with plants",    /* 160 */
  545.    "silence",
  546.    "sending",
  547.    "teleport without error",
  548.    "portal",
  549.    "dragon ride",
  550.    "mount",
  551.    "****",
  552.    "****",
  553.    "****",
  554.    "first aid",    /* 170 */
  555.    "sign language",
  556.    "riding",
  557.    "switch opponents",
  558.    "dodge",
  559.    "remove trap",
  560.    "retreat",
  561.    "quivering palm",
  562.    "safe fall",
  563.    "feign death",
  564.    "hunt",    /* 180 */
  565.    "find trap",
  566.    "spring leap",
  567.    "disarm",
  568.    "read magic",
  569.    "evauluate",
  570.    "spy",
  571.    "doorbash",
  572.    "swim",
  573.    "necromancy",
  574.    "vegetable lore",    /* 190 */
  575.    "demonology",
  576.    "animal lore",
  577.    "reptile lore",
  578.    "people lore",
  579.    "giant lore",
  580.    "other lore",
  581.    "",
  582.    "",
  583.    "",
  584.    "",    /* 200 */
  585.    "fire breath",
  586.    "gas breath",
  587.    "frost breath",
  588.    "acid breath",
  589.    "lightning breath",
  590.    "",
  591.    "",
  592.    "",
  593.    "",
  594.    "",    /* 210 */
  595.    "",
  596.    "",    /*  (180) */
  597.    "\n"
  598. };
  599.  
  600.  
  601. const byte saving_throws[MAX_CLASS][5][ABS_MAX_LVL] = {
  602. {
  603. /* mage */
  604.   {16,14,14,14,14,14,13,13,13,13,13,11,11,11,11,11,10,10,10,10,10, 8, 6, 4, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0},
  605.   {13,11,11,11,11,11, 9, 9, 9, 9, 9, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 3, 2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0},
  606.   {15,13,13,13,13,13,11,11,11,11,11, 9, 9, 9, 9, 9, 7, 7, 7, 7, 7, 5, 4, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0},
  607.   {17,15,15,15,15,15,13,13,13,13,13,11,11,11,11,11, 9, 9, 9, 9, 9, 7, 5, 3, 3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0},
  608.   {14,12,12,12,12,12,10,10,10,10,10, 8, 8, 8, 8, 8, 6, 6, 6, 6, 6, 4, 3, 2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0}
  609. }, 
  610. /* cleric */
  611. {
  612.   {11,10,10,10, 9, 9, 9, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 2, 2, 2, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0},
  613.   {16,14,14,14,13,13,13,11,11,11,10,10,10, 9, 9, 9, 8, 8, 8, 6, 6, 5, 4, 3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0},
  614.   {15,13,13,13,12,12,12,10,10,10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 5, 5, 4, 3, 2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  615.   {18,16,16,16,15,15,15,13,13,13,12,12,12,11,11,11,10,10,10, 8, 8, 7, 6, 5, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  616.   {17,15,15,15,14,14,14,12,12,12,11,11,11,10,10,10, 9, 9, 9, 7, 7, 6, 5, 4, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
  617. }, 
  618. /* warrior */
  619. {
  620.   {15,13,13,13,13,12,12,12,12,11,11,11,11,10,10,10,10, 9, 9, 9, 9, 8, 7, 6, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  621.   {16,14,14,14,14,12,12,12,12,10,10,10,10, 8, 8, 8, 8, 6, 6, 6, 6, 4, 3, 2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  622.   {14,12,12,12,12,11,11,11,11,10,10,10,10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 5, 3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  623.   {18,16,16,16,16,15,15,15,15,14,14,14,14,13,13,13,13,12,12,12,12,11, 9, 5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  624.   {17,15,15,15,15,13,13,13,13,11,11,11,11, 9, 9, 9, 9, 7, 7, 7, 7, 5, 3, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
  625. }, 
  626. /* thief */
  627. {
  628.   {16,14,14,13,13,11,11,10,10, 8, 8, 7, 7, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  629.   {18,16,16,15,15,13,13,12,12,10,10, 9, 9, 7, 7, 6, 6, 5, 5, 5, 5, 4, 3, 2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  630.   {17,15,15,14,14,12,12,11,11, 9, 9, 8, 8, 6, 6, 5, 5, 4, 4, 4, 4, 3, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  631.   {20,17,17,16,16,13,13,12,12, 9, 9, 8, 8, 5, 5, 4, 4, 4, 4, 4, 4, 3, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  632.   {19,17,17,16,16,14,14,13,13,11,11,10,10, 8, 8, 7, 7, 6, 6, 6, 6, 4, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
  633. }, /* druid */
  634. {
  635.   {11,10,10,10, 9, 9, 9, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 2, 2, 2, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0},
  636.   {16,14,14,14,13,13,13,11,11,11,10,10,10, 9, 9, 9, 8, 8, 8, 6, 6, 5, 4, 3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0},
  637.   {15,13,13,13,12,12,12,10,10,10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 5, 5, 4, 3, 2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  638.   {18,16,16,16,15,15,15,13,13,13,12,12,12,11,11,11,10,10,10, 8, 8, 7, 6, 5, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  639.   {17,15,15,15,14,14,14,12,12,12,11,11,11,10,10,10, 9, 9, 9, 7, 7, 6, 5, 4, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
  640. }, 
  641. { /* monk */
  642.   {16,14,14,13,13,11,11,10,10, 8, 8, 7, 7, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  643.   {18,16,16,15,15,13,13,12,12,10,10, 9, 9, 7, 7, 6, 6, 5, 5, 5, 5, 4, 3, 2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  644.   {17,15,15,14,14,12,12,11,11, 9, 9, 8, 8, 6, 6, 5, 5, 4, 4, 4, 4, 3, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  645.   {20,17,17,16,16,13,13,12,12, 9, 9, 8, 8, 5, 5, 4, 4, 4, 4, 4, 4, 3, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  646.   {19,17,17,16,16,14,14,13,13,11,11,10,10, 8, 8, 7, 7, 6, 6, 6, 6, 4, 2, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
  647. }
  648.  
  649. };
  650.  
  651.  
  652. void spello(int nr, byte beat, byte pos, byte mlev, byte clev, byte dlev, ubyte mana,
  653.         sh_int tar, void *func, sh_int sf)
  654. {
  655.   spell_info[nr].spell_pointer = func;
  656.   spell_info[nr].beats = beat;
  657.   spell_info[nr].minimum_position = pos;
  658.   spell_info[nr].min_usesmana = mana;
  659.   spell_info[nr].min_level_cleric = clev;
  660.   spell_info[nr].min_level_magic = mlev;
  661.   spell_info[nr].min_level_druid = dlev;
  662.   spell_info[nr].targets = tar;
  663.   spell_info[nr].spellfail = sf;
  664. }
  665.  
  666.  
  667. int SPELL_LEVEL(struct char_data *ch, int sn) 
  668. {
  669.   int min;
  670.  
  671.   min = ABS_MAX_LVL;
  672.  
  673.   if (HasClass(ch, CLASS_MAGIC_USER))
  674.     min = MIN(min, spell_info[sn].min_level_magic);
  675.  
  676.   if (HasClass(ch, CLASS_CLERIC))
  677.     min = MIN(min, spell_info[sn].min_level_cleric);
  678.  
  679.   if (HasClass(ch, CLASS_DRUID))
  680.     min = MIN(min, spell_info[sn].min_level_druid);
  681.  
  682.   return(min);
  683.  
  684. #if 0
  685.   if ((HasClass(ch, CLASS_MAGIC_USER)) &&
  686.       (HasClass(ch, CLASS_CLERIC))) {
  687.    return(MIN(spell_info[sn].min_level_magic,spell_info[sn].min_level_cleric));
  688.   } else if (HasClass(ch, CLASS_MAGIC_USER)) {
  689.     return(spell_info[sn].min_level_magic);
  690.   } else {
  691.     return(spell_info[sn].min_level_cleric);
  692.   }
  693. #endif
  694.  
  695. }
  696.  
  697.  
  698. void affect_update( int pulse )
  699. {
  700.   static struct affected_type *af, *next_af_dude;
  701.   register struct char_data *i;
  702.   register struct obj_data *j;
  703.   struct obj_data *next_thing;
  704.   struct char_data  *next_char;
  705.   struct room_data *rp;
  706.   int dead=FALSE, room, k;
  707.   
  708.   extern struct time_info_data time_info;
  709.   
  710.   
  711.   void update_char_objects( struct char_data *ch ); /* handler.c */
  712.   void do_save(struct char_data *ch, char *arg, int cmd); /* act.other.c */
  713.   
  714.   
  715.   for (i = character_list; i; i = next_char) {
  716.     next_char = i->next;
  717.     /*
  718.      *  check the effects on the char
  719.      */
  720.     dead=FALSE;
  721.     for (af = i->affected; af&&!dead; af = next_af_dude) {
  722.       next_af_dude = af->next;
  723.       if (af->duration >= 1) {
  724.     af->duration--;
  725.  
  726.     if (af->duration == 1) {
  727.       SpellWearOffSoon(af->type, i);
  728.     }
  729.  
  730.       } else {
  731.     /* It must be a spell */
  732.     if ((af->type > 0) && (af->type < FIRST_BREATH_WEAPON)) { 
  733.       if (!af->next || (af->next->type != af->type) ||
  734.           (af->next->duration > 0)) {
  735.  
  736.         k = af->type;
  737.             SpellWearOff(k, i);
  738.         affect_remove(i, af);
  739.  
  740.       }
  741.     } else if (af->type>=FIRST_BREATH_WEAPON &&
  742.            af->type <=LAST_BREATH_WEAPON ) {
  743.       extern funcp bweapons[];
  744.       bweapons[af->type-FIRST_BREATH_WEAPON](-af->modifier/2, i, "",
  745.                          SPELL_TYPE_SPELL, i, 0);
  746.       if (!i->affected) {
  747.         /* oops, you're dead :) */
  748.         dead = TRUE;
  749.         break;
  750.       }
  751.       affect_remove(i, af);
  752.     }
  753.       }
  754.     }
  755.     if (!dead) {
  756.  
  757.       if (GET_POS(i) >= POSITION_STUNNED && (i->desc || !IS_PC(i))) {
  758.         GET_HIT(i)  = MIN(GET_HIT(i)  + hit_gain(i),  hit_limit(i));
  759.         GET_MANA(i) = MIN(GET_MANA(i) + mana_gain(i), mana_limit(i));
  760.         GET_MOVE(i) = MIN(GET_MOVE(i) + move_gain(i), move_limit(i));
  761.         if (GET_POS(i) == POSITION_STUNNED) 
  762.       update_pos( i );
  763.       } else if (GET_POS(i) == POSITION_INCAP) {
  764.         /* do nothing */  damage(i, i, 0, TYPE_SUFFERING);
  765.       } else if (!IS_NPC(i) && (GET_POS(i) == POSITION_MORTALLYW)) {
  766.     damage(i, i, 1, TYPE_SUFFERING);
  767.       }
  768.  
  769.       if (IS_PC(i))    {
  770.         update_char_objects(i);
  771.         if (GetMaxLevel(i) < DEMIGOD && i->in_room != 3 && i->in_room != 2)
  772.       check_idling(i);
  773.         rp = real_roomp(i->in_room);
  774.     if (rp) {
  775.       if (rp->sector_type == SECT_WATER_SWIM ||
  776.            rp->sector_type == SECT_WATER_NOSWIM) {
  777.              gain_condition(i,FULL,-1);
  778.              gain_condition(i,DRUNK,-1);
  779.        } else if (rp->sector_type == SECT_DESERT) {
  780.              gain_condition(i,FULL,-1);
  781.              gain_condition(i,DRUNK,-2);
  782.              gain_condition(i,THIRST,-2);
  783.        } else if (rp->sector_type == SECT_MOUNTAIN ||
  784.               rp->sector_type == SECT_HILLS) {
  785.              gain_condition(i,FULL,-2);
  786.              gain_condition(i,DRUNK,-2);
  787.        } else {
  788.              gain_condition(i,FULL,-1);
  789.              gain_condition(i,DRUNK,-1);
  790.              gain_condition(i,THIRST,-1);
  791.        }
  792.     }
  793.         if (i->specials.tick == time_info.hours) {/* works for 24, change for
  794.                              anything else        */
  795.       if (!IS_IMMORTAL(i) && i->in_room != 3)  /* the special case for room
  796.                               3 is a hack to keep
  797.                               link dead people who
  798.                               have no stuff from
  799.                               being saved without
  800.                               stuff...  */
  801.            do_save(i,"",0);
  802.         }
  803.       }
  804.       check_nature(i);  /* check falling, check drowning, etc */
  805.     }
  806.   }
  807.   
  808.   /*
  809.    *  update the objects
  810.    */
  811.   
  812.   for(j = object_list; j ; j = next_thing){
  813.     next_thing = j->next; /* Next in object list */
  814.     
  815.     /* If this is a corpse */
  816.     if ( (GET_ITEM_TYPE(j) == ITEM_CONTAINER) && 
  817.     (j->obj_flags.value[3]) ) {
  818.       /* timer count down */
  819.       if (j->obj_flags.timer > 0) j->obj_flags.timer--;
  820.       
  821.       if (!j->obj_flags.timer) {
  822.     if (j->carried_by)
  823.       act("$p biodegrades in your hands. Everything in it falls to the floor", 
  824.           FALSE, j->carried_by, j, 0, TO_CHAR);
  825.     else if ((j->in_room != NOWHERE) && 
  826.          (real_roomp(j->in_room)->people)){
  827.       act("$p dissolves into a fertile soil.",
  828.           TRUE, real_roomp(j->in_room)->people, j, 0, TO_ROOM);
  829.       act("$p dissolves into a fertile soil.",
  830.           TRUE, real_roomp(j->in_room)->people, j, 0, TO_CHAR);
  831.     }    
  832.     ObjFromCorpse(j);
  833.       }
  834.     } else {
  835.       
  836.       /*
  837.        *  Sound objects
  838.        */
  839.       if (ITEM_TYPE(j) == ITEM_AUDIO) {
  840.     if (((j->obj_flags.value[0]) && 
  841.          (pulse % j->obj_flags.value[0])==0) ||
  842.         (!number(0,5))) {
  843.       if (j->carried_by) {
  844.         room = j->carried_by->in_room;
  845.       } else if (j->equipped_by) {
  846.         room = j->equipped_by->in_room;
  847.       } else if (j->in_room != NOWHERE) {
  848.         room = j->in_room;
  849.       } else {
  850.         room = RecGetObjRoom(j);
  851.       }
  852.       /*
  853.        *  broadcast to room
  854.        */
  855.       
  856.       if (j->action_description) {      
  857.         MakeNoise(room, j->action_description, j->action_description);
  858.       }
  859.     }
  860.       } else {
  861.     if (obj_index[j->item_number].func) {
  862.       (*obj_index[j->item_number].func)(0, 0, 0, j, PULSE_TICK);
  863.     }
  864.       }
  865.     }    
  866.   }
  867. }  
  868.  
  869.  
  870. void clone_char(struct char_data *ch)
  871. {
  872.         send_to_char("Nosir, i don't like it\n\r", ch);
  873. }
  874.  
  875.  
  876.  
  877. void clone_obj(struct obj_data *obj)
  878. {
  879.  
  880. }
  881.  
  882.  
  883.  
  884. /* Check if making CH follow VICTIM will create an illegal */
  885. /* Follow "Loop/circle"                                    */
  886. bool circle_follow(struct char_data *ch, struct char_data *victim)
  887. {
  888.   struct char_data *k;
  889.  
  890.   for(k=victim; k; k=k->master) {
  891.     if (k == ch)
  892.       return(TRUE);
  893.   }
  894.   
  895.   return(FALSE);
  896. }
  897.  
  898.  
  899.  
  900. /* Called when stop following persons, or stopping charm */
  901. /* This will NOT do if a character quits/dies!!          */
  902. void stop_follower(struct char_data *ch)
  903. {
  904.   struct follow_type *j, *k;
  905.  
  906.   if (!ch->master) return;
  907.  
  908.   if (IS_AFFECTED(ch, AFF_CHARM)) {
  909.     act("You realize that $N is a jerk!", FALSE, ch, 0, ch->master, TO_CHAR);
  910.     act("$n realizes that $N is a jerk!", FALSE, ch, 0, ch->master, 
  911.     TO_NOTVICT);
  912.     act("$n hates your guts!", FALSE, ch, 0, ch->master, TO_VICT);
  913.     if (affected_by_spell(ch, SPELL_CHARM_PERSON))
  914.       affect_from_char(ch, SPELL_CHARM_PERSON);
  915.   } else {
  916.     act("You stop following $N.", FALSE, ch, 0, ch->master, TO_CHAR);
  917.     if (!IS_SET(ch->specials.act,PLR_STEALTH)) {
  918.       act("$n stops following $N.", FALSE, ch, 0, ch->master, TO_NOTVICT);
  919.       act("$n stops following you.", FALSE, ch, 0, ch->master, TO_VICT);
  920.     }
  921.   }
  922.   
  923.   if (ch->master->followers->follower == ch) { /* Head of follower-list? */
  924.     k = ch->master->followers;
  925.     ch->master->followers = k->next;
  926.     free(k);
  927.   } else { /* locate follower who is not head of list */
  928.     
  929.     for(k = ch->master->followers; k->next && k->next->follower!=ch; 
  930.     k=k->next)  
  931.       ;
  932.     
  933.     if (k->next) {
  934.       j = k->next;
  935.       k->next = j->next;
  936.       free(j);
  937.     } else {
  938.       assert(FALSE);
  939.     }
  940.   }
  941.   
  942.   ch->master = 0;
  943.   REMOVE_BIT(ch->specials.affected_by, AFF_CHARM | AFF_GROUP);
  944. }
  945.  
  946.  
  947.  
  948. /* Called when a character that follows/is followed dies */
  949. void die_follower(struct char_data *ch)
  950. {
  951.   struct follow_type *j, *k;
  952.   
  953.   if (ch->master)
  954.     stop_follower(ch);
  955.   
  956.   for (k=ch->followers; k; k=j) {
  957.     j = k->next;
  958.     stop_follower(k->follower);
  959.   }
  960. }
  961.  
  962.  
  963.  
  964. /* Do NOT call this before having checked if a circle of followers */
  965. /* will arise. CH will follow leader                               */
  966. void add_follower(struct char_data *ch, struct char_data *leader)
  967. {
  968.   struct follow_type *k;
  969.   
  970.   assert(!ch->master);
  971.   
  972.   ch->master = leader;
  973.   
  974.   CREATE(k, struct follow_type, 1);
  975.   
  976.   k->follower = ch;
  977.   k->next = leader->followers;
  978.   leader->followers = k;
  979.   
  980.   
  981.   act("You now follow $N.", FALSE, ch, 0, leader, TO_CHAR);
  982.   if (!IS_SET(ch->specials.act, PLR_STEALTH)) {
  983.     act("$n starts following you.", TRUE, ch, 0, leader, TO_VICT);
  984.     act("$n now follows $N.", TRUE, ch, 0, leader, TO_NOTVICT);
  985.   }
  986. }
  987.  
  988.  
  989. struct syllable {
  990.   char org[10];
  991.   char new[10];
  992. };
  993.  
  994. struct syllable syls[] = {
  995.   { " ", " " },
  996.   { "ar", "abra"   },
  997.   { "au", "kada"    },
  998.   { "bless", "fido" },
  999.   { "blind", "nose" },
  1000.   { "bur", "mosa" },
  1001.   { "cu", "judi" },
  1002.   { "ca", "jedi" },
  1003.   { "de", "oculo"},
  1004.   { "en", "unso" },
  1005.   { "light", "dies" },
  1006.   { "lo", "hi" },
  1007.   { "mor", "zak" },
  1008.   { "move", "sido" },
  1009.   { "ness", "lacri" },
  1010.   { "ning", "illa" },
  1011.   { "per", "duda" },
  1012.   { "ra", "gru"   },
  1013.   { "re", "candus" },
  1014.   { "son", "sabru" },
  1015.   { "se",  "or"},
  1016.   { "tect", "infra" },
  1017.   { "tri", "cula" },
  1018.   { "ven", "nofo" },
  1019.   {"a", "a"},{"b","b"},{"c","q"},{"d","e"},{"e","z"},{"f","y"},{"g","o"},
  1020.   {"h", "p"},{"i","u"},{"j","y"},{"k","t"},{"l","r"},{"m","w"},{"n","i"},
  1021.   {"o", "a"},{"p","s"},{"q","d"},{"r","f"},{"s","g"},{"t","h"},{"u","j"},
  1022.   {"v", "z"},{"w","x"},{"x","n"},{"y","l"},{"z","k"}, {"",""}
  1023. };
  1024.  
  1025. say_spell( struct char_data *ch, int si )
  1026. {
  1027.   char buf[MAX_STRING_LENGTH], splwd[MAX_BUF_LENGTH];
  1028.   char buf2[MAX_STRING_LENGTH];
  1029.   
  1030.   int j, offs;
  1031.   struct char_data *temp_char;
  1032.   extern struct syllable syls[];
  1033.   
  1034.   
  1035.   
  1036.   strcpy(buf, "");
  1037.   strcpy(splwd, spells[si-1]);
  1038.   
  1039.   offs = 0;
  1040.   
  1041.   while(*(splwd+offs)) {
  1042.     for(j=0; *(syls[j].org); j++)
  1043.       if (strncmp(syls[j].org, splwd+offs, strlen(syls[j].org))==0) {
  1044.     strcat(buf, syls[j].new);
  1045.     if (strlen(syls[j].org))
  1046.       offs+=strlen(syls[j].org);
  1047.     else
  1048.       ++offs;
  1049.       }
  1050.   }
  1051.   
  1052.   
  1053.   sprintf(buf2,"$n utters the words, '%s'", buf);
  1054.   sprintf(buf, "$n utters the words, '%s'", spells[si-1]);
  1055.   
  1056.   for(temp_char = real_roomp(ch->in_room)->people;
  1057.       temp_char;
  1058.       temp_char = temp_char->next_in_room)
  1059.     if(temp_char != ch) {
  1060.       if (GET_RACE(ch) == GET_RACE(temp_char))
  1061.     act(buf, FALSE, ch, 0, temp_char, TO_VICT);
  1062.       else
  1063.     act(buf2, FALSE, ch, 0, temp_char, TO_VICT);
  1064.       
  1065.     }
  1066. }
  1067.  
  1068.  
  1069.  
  1070. bool saves_spell(struct char_data *ch, sh_int save_type)
  1071. {
  1072.   int save;
  1073.   
  1074.   /* Negative apply_saving_throw makes saving throw better! */
  1075.   
  1076.   save = ch->specials.apply_saving_throw[save_type];
  1077.   
  1078.   if (!IS_NPC(ch)) {
  1079.     
  1080.     save += saving_throws[BestMagicClass(ch)][save_type][GET_LEVEL(ch,BestMagicClass(ch))];
  1081.     if (GetMaxLevel(ch) > MAX_MORT)
  1082.       return(TRUE);
  1083.   }
  1084.  
  1085.   if (GET_RACE(ch) == RACE_GOD)   /* gods always save */
  1086.     return(1);
  1087.   
  1088.   return(MAX(1,save) < number(1,20));
  1089. }
  1090.  
  1091. bool ImpSaveSpell(struct char_data *ch, sh_int save_type, int mod)
  1092. {
  1093.   int save;
  1094.   
  1095.   /* Positive mod is better for save */
  1096.   
  1097.   /* Negative apply_saving_throw makes saving throw better! */
  1098.   
  1099.   save = ch->specials.apply_saving_throw[save_type] - mod;
  1100.   
  1101.   if (!IS_NPC(ch)) {
  1102.     
  1103.     save += saving_throws[BestMagicClass(ch)][save_type]
  1104.       [GET_LEVEL(ch,BestMagicClass(ch))];
  1105.     if (GetMaxLevel(ch) >= LOW_IMMORTAL)
  1106.       return(TRUE);
  1107.   }
  1108.   
  1109.   return(MAX(1,save) < number(1,20));
  1110. }
  1111.  
  1112.  
  1113.  
  1114. char *skip_spaces(char *string)
  1115. {
  1116.   for(;*string && (*string)==' ';string++);
  1117.  
  1118.   return(string);
  1119. }
  1120.  
  1121.  
  1122.  
  1123. /* Assumes that *argument does start with first letter of chopped string */
  1124.  
  1125. void do_cast(struct char_data *ch, char *argument, int cmd)
  1126. {
  1127.   struct obj_data *tar_obj;
  1128.   struct char_data *tar_char;
  1129.   char name[MAX_INPUT_LENGTH];
  1130.   int qend, spl, i;
  1131. #if 0
  1132.   int  mlev, clev, dlev, minl;
  1133. #endif
  1134.   bool target_ok;
  1135.   
  1136.   if (IS_NPC(ch) && (!IS_SET(ch->specials.act, ACT_POLYSELF)))
  1137.     return;
  1138.  
  1139.   if (!IsHumanoid(ch)) {
  1140.     send_to_char("Sorry, you don't have the right form for that.\n\r",ch);
  1141.     return;
  1142.   }
  1143.   
  1144.   if (!IS_IMMORTAL(ch)) {
  1145.     if (BestMagicClass(ch) == WARRIOR_LEVEL_IND) {
  1146.       send_to_char("Think you had better stick to fighting...\n\r", ch);
  1147.       return;
  1148.     } else if (BestMagicClass(ch) == THIEF_LEVEL_IND) {
  1149.       send_to_char("Think you should stick to stealing...\n\r", ch);
  1150.       return;
  1151.     } else if (BestMagicClass(ch) == MONK_LEVEL_IND) {
  1152.       send_to_char("Think you should stick to meditating...\n\r", ch);
  1153.       return;
  1154.     }
  1155.   }
  1156.  
  1157.   if (apply_soundproof(ch))
  1158.      return;
  1159.  
  1160.   argument = skip_spaces(argument);
  1161.   
  1162.   /* If there is no chars in argument */
  1163.   if (!(*argument)) {
  1164.     send_to_char("Cast which what where?\n\r", ch);
  1165.     return;
  1166.   }
  1167.   
  1168.   if (*argument != '\'') {
  1169.     send_to_char("Magic must always be enclosed by the holy magic symbols : '\n\r",ch);
  1170.     return;
  1171.   }
  1172.   
  1173.   /* Locate the last quote && lowercase the magic words (if any) */
  1174.   
  1175.   for (qend=1; *(argument+qend) && (*(argument+qend) != '\'') ; qend++)
  1176.     *(argument+qend) = LOWER(*(argument+qend));
  1177.   
  1178.   if (*(argument+qend) != '\'') {
  1179.     send_to_char("Magic must always be enclosed by the holy magic symbols : '\n\r",ch);
  1180.     return;
  1181.   }
  1182.   
  1183.   spl = old_search_block(argument, 1, qend-1,spells, 0);
  1184.   
  1185.   if (!spl) {
  1186.     send_to_char("Your lips do not move, no magic appears.\n\r",ch);
  1187.     return;
  1188.   }
  1189.  
  1190.   if (!ch->skills)
  1191.     return;
  1192.   
  1193.   if ((spl > 0) && (spl < MAX_SKILLS) && spell_info[spl].spell_pointer) {
  1194.     if (GET_POS(ch) < spell_info[spl].minimum_position) {
  1195.       switch(GET_POS(ch)) {
  1196.       case POSITION_SLEEPING :
  1197.     send_to_char("You dream about great magical powers.\n\r", ch);
  1198.     break;
  1199.       case POSITION_RESTING :
  1200.     send_to_char("You can't concentrate enough while resting.\n\r",ch);
  1201.     break;
  1202.       case POSITION_SITTING :
  1203.     send_to_char("You can't do this sitting!\n\r", ch);
  1204.     break;
  1205.       case POSITION_FIGHTING :
  1206.     send_to_char("Impossible! You can't concentrate enough!.\n\r", ch);
  1207.     break;
  1208.       default:
  1209.     send_to_char("It seems like you're in pretty bad shape!\n\r",ch);
  1210.     break;
  1211.       } /* Switch */
  1212.     }    else {
  1213.       
  1214.       if (!IS_IMMORTAL(ch)) {
  1215.  
  1216.     if ((spell_info[spl].min_level_magic > 
  1217.          GET_LEVEL(ch,MAGE_LEVEL_IND)) &&
  1218.         (spell_info[spl].min_level_cleric >
  1219.          GET_LEVEL(ch,CLERIC_LEVEL_IND)) &&
  1220.         (spell_info[spl].min_level_druid >
  1221.          GET_LEVEL(ch, DRUID_LEVEL_IND))) {
  1222.       send_to_char("Sorry, you can't do that.\n\r", ch);
  1223.       return;
  1224.     }
  1225.       }
  1226.       argument+=qend+1;    /* Point to the last ' */
  1227.       for(;*argument == ' '; argument++);
  1228.       
  1229.       /* **************** Locate targets **************** */
  1230.       
  1231.       target_ok = FALSE;
  1232.       tar_char = 0;
  1233.       tar_obj = 0;
  1234.       
  1235.       if (IS_SET(spell_info[spl].targets, TAR_VIOLENT) &&
  1236.       check_peaceful(ch, "Impolite magic is banned here."))
  1237.     return;
  1238.  
  1239.       if (!IS_SET(spell_info[spl].targets, TAR_IGNORE)) {
  1240.     
  1241.     argument = one_argument(argument, name);
  1242.     
  1243.     if (*name) {
  1244.       if (IS_SET(spell_info[spl].targets, TAR_CHAR_ROOM)) {
  1245.         if (tar_char = get_char_room_vis(ch, name)) {
  1246.           if (tar_char == ch || tar_char == ch->specials.fighting ||
  1247.           tar_char->attackers < 6 || 
  1248.           tar_char->specials.fighting == ch)
  1249.         target_ok = TRUE;
  1250.           else {
  1251.         send_to_char("Too much fighting, you can't get a clear shot.\n\r", ch);
  1252.         target_ok = FALSE;
  1253.           }
  1254.         } else {
  1255.           target_ok = FALSE;
  1256.         }
  1257.       }
  1258.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_CHAR_WORLD))
  1259.         if (tar_char = get_char_vis(ch, name))
  1260.           target_ok = TRUE;
  1261.       
  1262.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_OBJ_INV))
  1263.         if (tar_obj = get_obj_in_list_vis(ch, name, ch->carrying))
  1264.           target_ok = TRUE;
  1265.       
  1266.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_OBJ_ROOM))
  1267.         if (tar_obj = get_obj_in_list_vis(ch, name, real_roomp(ch->in_room)->contents))
  1268.           target_ok = TRUE;
  1269.       
  1270.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_OBJ_WORLD))
  1271.         if (tar_obj = get_obj_vis(ch, name))
  1272.           target_ok = TRUE;
  1273.       
  1274.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_OBJ_EQUIP)) {
  1275.         for(i=0; i<MAX_WEAR && !target_ok; i++)
  1276.           if (ch->equipment[i] && str_cmp(name, ch->equipment[i]->name) == 0) {
  1277.         tar_obj = ch->equipment[i];
  1278.         target_ok = TRUE;
  1279.           }
  1280.       }
  1281.       
  1282.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_SELF_ONLY))
  1283.         if (str_cmp(GET_NAME(ch), name) == 0) {
  1284.           tar_char = ch;
  1285.           target_ok = TRUE;
  1286.         }
  1287.       
  1288.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_NAME)) {
  1289.         tar_obj = (void*)name;
  1290.         target_ok = TRUE;
  1291.       }
  1292.       
  1293.       if (tar_char) {
  1294.         if (IS_NPC(tar_char)) 
  1295.           if (IS_SET(tar_char->specials.act, ACT_IMMORTAL)) {
  1296.         send_to_char("You can't cast magic on that!",ch);
  1297.         return;
  1298.           }
  1299.       }
  1300.       
  1301.       
  1302.     } else { /* No argument was typed */
  1303.       
  1304.       if (IS_SET(spell_info[spl].targets, TAR_FIGHT_SELF))
  1305.         if (ch->specials.fighting) {
  1306.           tar_char = ch;
  1307.           target_ok = TRUE;
  1308.         }
  1309.       
  1310.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_FIGHT_VICT))
  1311.         if (ch->specials.fighting) {
  1312.           /* WARNING, MAKE INTO POINTER */
  1313.           tar_char = ch->specials.fighting;
  1314.           target_ok = TRUE;
  1315.         }
  1316.       
  1317.       if (!target_ok && IS_SET(spell_info[spl].targets, TAR_SELF_ONLY)) {
  1318.         tar_char = ch;
  1319.         target_ok = TRUE;
  1320.       }
  1321.       
  1322.     }
  1323.     
  1324.       } else {
  1325.     target_ok = TRUE; /* No target, is a good target */
  1326.       }
  1327.       
  1328.       if (!target_ok) {
  1329.     if (*name) {
  1330.       if (IS_SET(spell_info[spl].targets, TAR_CHAR_WORLD))
  1331.         send_to_char("Nobody playing by that name.\n\r", ch);
  1332.       else if (IS_SET(spell_info[spl].targets, TAR_CHAR_ROOM))
  1333.         send_to_char("Nobody here by that name.\n\r", ch);
  1334.       else if (IS_SET(spell_info[spl].targets, TAR_OBJ_INV))
  1335.         send_to_char("You are not carrying anything like that.\n\r", ch);
  1336.       else if (IS_SET(spell_info[spl].targets, TAR_OBJ_ROOM))
  1337.         send_to_char("Nothing here by that name.\n\r", ch);
  1338.       else if (IS_SET(spell_info[spl].targets, TAR_OBJ_WORLD))
  1339.         send_to_char("Nothing at all by that name.\n\r", ch);
  1340.       else if (IS_SET(spell_info[spl].targets, TAR_OBJ_EQUIP))
  1341.         send_to_char("You are not wearing anything like that.\n\r", ch);
  1342.       else if (IS_SET(spell_info[spl].targets, TAR_OBJ_WORLD))
  1343.         send_to_char("Nothing at all by that name.\n\r", ch);
  1344.       
  1345.     } else { /* Nothing was given as argument */
  1346.       if (spell_info[spl].targets < TAR_OBJ_INV)
  1347.         send_to_char("Who should the spell be cast upon?\n\r", ch);
  1348.       else
  1349.         send_to_char("What should the spell be cast upon?\n\r", ch);
  1350.     }
  1351.     return;
  1352.       } else { /* TARGET IS OK */
  1353.     if ((tar_char == ch) && IS_SET(spell_info[spl].targets, TAR_SELF_NONO)) {
  1354.       send_to_char("You can not cast this spell upon yourself.\n\r", ch);
  1355.       return;
  1356.     }
  1357.     else if ((tar_char != ch) && IS_SET(spell_info[spl].targets, TAR_SELF_ONLY)) {
  1358.       send_to_char("You can only cast this spell upon yourself.\n\r", ch);
  1359.       return;
  1360.     } else if (IS_AFFECTED(ch, AFF_CHARM) && (ch->master == tar_char)) {
  1361.       send_to_char("You are afraid that it could harm your master.\n\r", ch);
  1362.       return;
  1363.     }
  1364.       }
  1365.  
  1366.  
  1367.       if (cmd == 283) { /* recall */
  1368.     if (!MEMORIZED(ch, spl)) {
  1369.       send_to_char("You don't have that spell memorized!\n\r", ch);
  1370.       return;
  1371.     }
  1372.       } else {      
  1373.     if (GetMaxLevel(ch) < LOW_IMMORTAL) {
  1374.       if (GET_MANA(ch) < (unsigned int)USE_MANA(ch, (int)spl)) {
  1375.         send_to_char("You can't summon enough energy to cast the spell.\n\r", ch);
  1376.         return;
  1377.       }
  1378.     }
  1379.       }
  1380.  
  1381.       if (spl != SPELL_VENTRILOQUATE)  /* :-) */
  1382.     say_spell(ch, spl);
  1383.       
  1384.       WAIT_STATE(ch, spell_info[spl].beats);
  1385.       
  1386.       if ((spell_info[spl].spell_pointer == 0) && spl>0)
  1387.     send_to_char("Sorry, this magic has not yet been implemented :(\n\r", 
  1388.              ch);
  1389.       else {
  1390.     int max, cost;
  1391.  
  1392.     max = ch->specials.spellfail;
  1393.     max += GET_COND(ch, DRUNK)*10; /* 0 - 240 */
  1394.  
  1395.     if (ch->attackers > 0)
  1396.       max += spell_info[spl].spellfail;
  1397.     else if (ch->specials.fighting)
  1398.       max += spell_info[spl].spellfail/2;
  1399.  
  1400.     if (number(1,max) > ch->skills[spl].learned) { 
  1401.       send_to_char("You lost your concentration!\n\r", ch);
  1402.       cost = (int)USE_MANA(ch, (int)spl);
  1403.       GET_MANA(ch) -= (cost>>1);
  1404.       LearnFromMistake(ch, spl, 0, 95);
  1405.       return;
  1406.     }
  1407.         if (tar_char) {
  1408.       if (GET_POS(tar_char) == POSITION_DEAD) {
  1409.         send_to_char("The magic fizzles against the dead body\n", ch);
  1410.         return;
  1411.       }
  1412.     }
  1413.  
  1414.     if (check_nomagic(ch, 
  1415.         "Your magical spell is destroyed by unknown forces", 
  1416.         "$n's spell dissolves like so much wet toilet paper"))
  1417.       return;
  1418.  
  1419. #if 0
  1420.     mlev = spell_info[spl].min_level_magic;
  1421.     clev = spell_info[spl].min_level_cleric;
  1422.     dlev = spell_info[spl].min_level_druid;
  1423.  
  1424.     minl = 0;
  1425.     if (HasClass(ch, CLASS_MAGIC_USER)) {
  1426.       if (!EqWBits(ch, ITEM_ANTI_MAGE))
  1427.         minl = 
  1428.     }
  1429. #endif
  1430.  
  1431.     send_to_char("Ok.\n\r",ch);
  1432.     ((*spell_info[spl].spell_pointer) (GET_LEVEL(ch, BestMagicClass(ch)), ch, argument, SPELL_TYPE_SPELL, tar_char, tar_obj));
  1433.     cost = (int)USE_MANA(ch, (int)spl);
  1434.     if (cmd == 283) /* recall */ {
  1435.       FORGET(ch, spl);
  1436.     } else {
  1437.       GET_MANA(ch) -= cost;
  1438.     }
  1439.       }
  1440.       
  1441.     }    /* if GET_POS < min_pos */
  1442.     
  1443.     return;
  1444.   }
  1445.   
  1446.   switch (number(1,5)){
  1447.   case 1: send_to_char("Bylle Grylle Grop Gryf???\n\r", ch); break;
  1448.   case 2: send_to_char("Olle Bolle Snop Snyf?\n\r",ch); break;
  1449.   case 3: send_to_char("Olle Grylle Bolle Bylle?!?\n\r",ch); break;
  1450.   case 4: send_to_char("Gryffe Olle Gnyffe Snop???\n\r",ch); break;
  1451.   default: send_to_char("Bolle Snylle Gryf Bylle?!!?\n\r",ch); break;
  1452.   }
  1453. }
  1454.  
  1455.  
  1456. void assign_spell_pointers()
  1457. {
  1458.   int i;
  1459.   
  1460.   for(i=0; i<MAX_SPL_LIST; i++)
  1461.     spell_info[i].spell_pointer = 0;
  1462.   
  1463.   
  1464.   /* From spells1.c */
  1465.  
  1466. /* mage only */  
  1467.   spello(32,12,POSITION_FIGHTING, 1, LOW_IMMORTAL, LOW_IMMORTAL, 15, 
  1468.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_magic_missile,10);
  1469.   
  1470.   spello( 8,12,POSITION_FIGHTING, 4, LOW_IMMORTAL,  LOW_IMMORTAL, 15,
  1471.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_chill_touch,10);
  1472.   
  1473.   spello( 5,24,POSITION_FIGHTING, 6, LOW_IMMORTAL,  LOW_IMMORTAL, 15,
  1474.      TAR_IGNORE | TAR_VIOLENT, cast_burning_hands,5);
  1475.   
  1476.   spello(37,12,POSITION_FIGHTING, 2, LOW_IMMORTAL,  LOW_IMMORTAL, 15,
  1477.      TAR_CHAR_ROOM|TAR_FIGHT_VICT|TAR_VIOLENT, cast_shocking_grasp,0);
  1478.  
  1479.   
  1480.   spello(30,24,POSITION_FIGHTING, 10, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1481.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT,cast_lightning_bolt,20);
  1482.  
  1483.   spello(10,24,POSITION_FIGHTING, 14,LOW_IMMORTAL, LOW_IMMORTAL, 20, 
  1484.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_colour_spray,40);
  1485.  
  1486.   spello(26,36,POSITION_FIGHTING, 25, LOW_IMMORTAL,  LOW_IMMORTAL, 50,
  1487.      TAR_IGNORE | TAR_VIOLENT, cast_fireball,25);
  1488.  
  1489. /* cleric */
  1490.   spello(23,24,POSITION_FIGHTING, LOW_IMMORTAL, 15, LOW_IMMORTAL, 15,
  1491.      TAR_IGNORE | TAR_VIOLENT, cast_earthquake,30);
  1492.     
  1493.   spello(22,24,POSITION_FIGHTING, LOW_IMMORTAL, 20,  LOW_IMMORTAL, 15,
  1494.      TAR_CHAR_ROOM | TAR_FIGHT_VICT, cast_dispel_evil, 30);
  1495.   
  1496.   
  1497.   spello( 6,36,POSITION_FIGHTING, LOW_IMMORTAL, 45, 18, 20,
  1498.      TAR_CHAR_ROOM|TAR_FIGHT_VICT|TAR_VIOLENT, cast_call_lightning, 50);
  1499.   
  1500.   spello(25,36,POSITION_FIGHTING, 22, LOW_IMMORTAL, LOW_IMMORTAL, 35, 
  1501.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_energy_drain, 100);
  1502.   
  1503.   spello(27,36,POSITION_FIGHTING, LOW_IMMORTAL, 25,  LOW_IMMORTAL, 35,
  1504.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_harm, 510);
  1505.   
  1506.   
  1507.   /* Spells2.c */
  1508.   
  1509.   spello( 1,12,POSITION_STANDING, 5,  2, LOW_IMMORTAL, 5,
  1510.      TAR_CHAR_ROOM, cast_armor, 0);
  1511.   
  1512.   spello( 2,12,POSITION_STANDING, 17, LOW_IMMORTAL,  LOW_IMMORTAL, 33,
  1513.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_teleport, 60);
  1514.   
  1515.   spello( 3,12,POSITION_STANDING,LOW_IMMORTAL,  1,  LOW_IMMORTAL, 5,
  1516.      TAR_OBJ_INV | TAR_OBJ_EQUIP | TAR_CHAR_ROOM, cast_bless, 0);
  1517.   
  1518.   spello( 4,24,POSITION_FIGHTING, 12,  14,  LOW_IMMORTAL, 15,
  1519.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_blindness, 60);
  1520.   
  1521.   spello(7,12,POSITION_STANDING, 4, LOW_IMMORTAL,  IMMORTAL, 10,
  1522.      TAR_CHAR_ROOM | TAR_SELF_NONO | TAR_FIGHT_VICT | TAR_VIOLENT,
  1523.      cast_charm_person, 0);
  1524.   
  1525.   /* */    spello( 9,12,POSITION_STANDING, LOKI+1, LOKI+1, LOKI+1,    40, 
  1526.            TAR_CHAR_ROOM, cast_clone, 0);
  1527.   
  1528.   spello(11,36,POSITION_STANDING, LOW_IMMORTAL, 26, 15, 25,
  1529.      TAR_IGNORE, cast_control_weather,0);
  1530.   
  1531.   spello(12,12,POSITION_STANDING,LOW_IMMORTAL,  5, IMMORTAL, 5,
  1532.      TAR_IGNORE, cast_create_food,0); 
  1533.   
  1534.   spello(13,12,POSITION_STANDING,LOW_IMMORTAL,  2, IMMORTAL, 5,
  1535.      TAR_OBJ_INV | TAR_OBJ_EQUIP, cast_create_water,0);
  1536.   
  1537.   spello(14,12,POSITION_STANDING,LOW_IMMORTAL,  6, LOW_IMMORTAL, 5,
  1538.      TAR_CHAR_ROOM, cast_cure_blind,0);
  1539.   
  1540.   spello(15,24,POSITION_FIGHTING,LOW_IMMORTAL,  10, 13, 11,
  1541.      TAR_CHAR_ROOM, cast_cure_critic, 30);
  1542.   
  1543.   spello(16,12,POSITION_FIGHTING,LOW_IMMORTAL,  1, 2, 5,
  1544.      TAR_CHAR_ROOM, cast_cure_light, 10);
  1545.   
  1546.   spello(17,24,POSITION_STANDING,13, 12, LOW_IMMORTAL, 20,
  1547.      TAR_CHAR_ROOM | TAR_OBJ_ROOM | TAR_OBJ_INV | TAR_OBJ_EQUIP | TAR_FIGHT_VICT | TAR_VIOLENT, cast_curse, 5);
  1548.   
  1549.   spello(18,12,POSITION_STANDING, LOW_IMMORTAL, 1, 6, 5,
  1550.      TAR_CHAR_ROOM, cast_detect_evil,0);
  1551.   
  1552.   spello(19,12,POSITION_STANDING, 2,  5, 7, 5,
  1553.      TAR_CHAR_ROOM, cast_detect_invisibility,0);
  1554.   
  1555.   spello(20,12,POSITION_STANDING, 1,  3, 5, 5,
  1556.      TAR_CHAR_ROOM, cast_detect_magic,0);
  1557.   
  1558.   spello(21,12,POSITION_STANDING,LOW_IMMORTAL,  LOW_IMMORTAL, 1, 5,
  1559.      TAR_CHAR_ROOM | TAR_OBJ_INV | TAR_OBJ_EQUIP, cast_detect_poison,0);
  1560.   
  1561.   spello(24,48,POSITION_STANDING,14, LOW_IMMORTAL, LOW_IMMORTAL, 100,
  1562.      TAR_OBJ_INV | TAR_OBJ_EQUIP, cast_enchant_weapon,0);
  1563.   
  1564.   spello(28,12,POSITION_FIGHTING,LOW_IMMORTAL, 25, LOW_IMMORTAL, 50,
  1565.      TAR_CHAR_ROOM, cast_heal,310);
  1566.   
  1567.   spello(29,12,POSITION_STANDING, 4, LOW_IMMORTAL, LOW_IMMORTAL, 5,
  1568.      TAR_CHAR_ROOM | TAR_OBJ_INV | TAR_OBJ_ROOM | TAR_OBJ_EQUIP, cast_invisibility, 0);
  1569.   
  1570.   spello(31,12,POSITION_STANDING, LOW_IMMORTAL, 11, LOW_IMMORTAL, 20,
  1571.      TAR_OBJ_WORLD, cast_locate_object, 0);
  1572.   
  1573.   spello(33,24,POSITION_FIGHTING,LOW_IMMORTAL,  13, 8, 10,
  1574.      TAR_CHAR_ROOM | TAR_SELF_NONO | TAR_OBJ_INV | TAR_OBJ_EQUIP | TAR_FIGHT_VICT | TAR_VIOLENT, cast_poison, 60);
  1575.   
  1576.   spello(34,12,POSITION_STANDING,LOW_IMMORTAL,  7, LOW_IMMORTAL, 5,
  1577.      TAR_CHAR_ROOM, cast_protection_from_evil, 0);
  1578.   
  1579.   spello(35,12,POSITION_STANDING,LOW_IMMORTAL, 8, LOW_IMMORTAL, 5,
  1580.      TAR_CHAR_ROOM | TAR_OBJ_INV | TAR_OBJ_EQUIP | TAR_OBJ_ROOM, cast_remove_curse, 0);
  1581.   
  1582.   spello(36,36,POSITION_STANDING, LOW_IMMORTAL, 26, LOW_IMMORTAL, 50,
  1583.      TAR_CHAR_ROOM, cast_sanctuary, 0);
  1584.   
  1585.   spello(38,24,POSITION_STANDING, 3, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1586.      TAR_CHAR_ROOM | TAR_VIOLENT |TAR_FIGHT_VICT, cast_sleep, 0);
  1587.   
  1588.   spello(39,12,POSITION_STANDING, 6, LOW_IMMORTAL, LOW_IMMORTAL, 10,
  1589.      TAR_CHAR_ROOM, cast_strength, 0);
  1590.   
  1591.   spello(40,36,POSITION_STANDING, 27,  19, LOW_IMMORTAL, 20,
  1592.      TAR_CHAR_WORLD, cast_summon, 0);
  1593.   
  1594.   /* */    spello(41,12,POSITION_STANDING, 1, LOW_IMMORTAL, LOW_IMMORTAL, 5,
  1595.      TAR_CHAR_ROOM | TAR_OBJ_ROOM | TAR_SELF_NONO, cast_ventriloquate, 0);
  1596.   
  1597.   spello(42,12,POSITION_STANDING,LOW_IMMORTAL, 15, LOW_IMMORTAL, 5,
  1598.      TAR_CHAR_ROOM | TAR_SELF_ONLY, cast_word_of_recall, 0);
  1599.   
  1600.   spello(43,12,POSITION_STANDING,LOW_IMMORTAL,  17, 8, 5,
  1601.      TAR_CHAR_ROOM | TAR_OBJ_INV | TAR_OBJ_ROOM, cast_remove_poison,0);
  1602.   
  1603.   spello(44,12,POSITION_STANDING,LOW_IMMORTAL,  4, LOW_IMMORTAL, 5,
  1604.      TAR_CHAR_ROOM, cast_sense_life,0);
  1605.   
  1606.   spello(45,0,POSITION_STANDING,LOKI+1,LOKI+1, LOKI+1,200,
  1607.      TAR_IGNORE, 0, 0);
  1608.   spello(46,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1,200,
  1609.      TAR_IGNORE, 0, 0);
  1610.   spello(47,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1,200,
  1611.      TAR_IGNORE, 0, 0);
  1612.   spello(48,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1,200,
  1613.      TAR_IGNORE, 0, 0);
  1614.   spello(49,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1,200,
  1615.      TAR_IGNORE, 0, 0);
  1616.   spello(50,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1,200,
  1617.      TAR_IGNORE, 0, 0);
  1618.   spello(51,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1,200,
  1619.      TAR_IGNORE, 0, 0);
  1620.   spello(52,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1, 200,
  1621.      TAR_IGNORE, 0, 0);
  1622.   
  1623.   spello(53,1,POSITION_STANDING,IMMORTAL,IMMORTAL, IMMORTAL, 100, 
  1624.      TAR_CHAR_ROOM | TAR_OBJ_ROOM | TAR_OBJ_INV, cast_identify, 0);
  1625.   
  1626.   spello(54,12,POSITION_STANDING, 8, LOW_IMMORTAL, 5,  7,
  1627.      TAR_CHAR_ROOM, cast_infravision, 0); 
  1628.   
  1629.   spello(55,12,POSITION_FIGHTING, LOW_IMMORTAL,  1, 2,  8,
  1630.      TAR_CHAR_ROOM | TAR_FIGHT_VICT, cast_cause_light, 10);
  1631.   
  1632.   spello(56,24,POSITION_FIGHTING, LOW_IMMORTAL,  10,  13, 11,
  1633.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT , cast_cause_critic, 20);
  1634.   
  1635.   spello(57,36,POSITION_FIGHTING, LOW_IMMORTAL , 15, LOW_IMMORTAL, 15,
  1636.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_flamestrike, 50);
  1637.   
  1638.   spello(58,36,POSITION_FIGHTING, LOW_IMMORTAL, 20, LOW_IMMORTAL, 15,
  1639.      TAR_CHAR_ROOM | TAR_FIGHT_VICT, cast_dispel_good, 50);
  1640.   
  1641.   spello(59,12,POSITION_FIGHTING, 6, LOW_IMMORTAL, LOW_IMMORTAL, 10,
  1642.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_weakness, 30);
  1643.   
  1644.   spello(60,12,POSITION_FIGHTING, 9, 10, 9, 15,
  1645.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_OBJ_ROOM | TAR_OBJ_INV |
  1646.      TAR_VIOLENT , cast_dispel_magic, 50);
  1647.   
  1648.   spello(61,12,POSITION_STANDING, 3, LOW_IMMORTAL, LOW_IMMORTAL, 10,
  1649.      TAR_IGNORE, cast_knock, 0);
  1650.   
  1651.   spello(62,12,POSITION_STANDING, 7, 4, 2, 10,
  1652.      TAR_CHAR_ROOM | TAR_FIGHT_VICT, cast_know_alignment, 0);
  1653.   
  1654.   spello(63,12,POSITION_STANDING, 16, 8, LOW_IMMORTAL, 5,
  1655.      TAR_OBJ_ROOM, cast_animate_dead, 0);
  1656.   
  1657.   spello(64,36,POSITION_FIGHTING, 20, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1658.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_paralyze, 90);
  1659.   
  1660.   spello(65,12,POSITION_FIGHTING, LOW_IMMORTAL, 6, 9 , 10,
  1661.      TAR_CHAR_ROOM | TAR_FIGHT_VICT, cast_remove_paralysis, 30);
  1662.   
  1663.   spello( 66, 12, POSITION_FIGHTING, 8, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1664.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_fear, 40);
  1665.   
  1666.   spello(67,24,POSITION_FIGHTING, 6, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1667.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_acid_blast, 20);
  1668.   
  1669.   spello(68,12,POSITION_STANDING, 9, LOW_IMMORTAL, 6, 15,
  1670.      TAR_CHAR_ROOM, cast_water_breath, 0);
  1671.   
  1672.   spello(69,12,POSITION_STANDING, 11, 22, 14, 15,
  1673.      TAR_CHAR_ROOM, cast_flying, 0);
  1674.   
  1675.   spello(70,24,POSITION_FIGHTING, 17, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1676.      TAR_IGNORE | TAR_VIOLENT,  cast_cone_of_cold, 40);
  1677.   
  1678.   spello(71,24,POSITION_FIGHTING, 36, LOW_IMMORTAL, LOW_IMMORTAL, 35,
  1679.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_meteor_swarm, 90);
  1680.   
  1681.   spello(72,12,POSITION_FIGHTING, 11, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1682.      TAR_IGNORE | TAR_VIOLENT,  cast_ice_storm, 20);
  1683.   
  1684.   spello(73,24,POSITION_FIGHTING, 1, LOW_IMMORTAL, LOW_IMMORTAL, 1,
  1685.      TAR_CHAR_ROOM, cast_shield, 15);
  1686.   
  1687.   spello(74,24,POSITION_STANDING, 4, LOW_IMMORTAL, LOW_IMMORTAL, 10,
  1688.      TAR_IGNORE, cast_mon_sum1,0);
  1689.   
  1690.   spello(75,24,POSITION_STANDING, 7, LOW_IMMORTAL, LOW_IMMORTAL, 12,
  1691.      TAR_IGNORE, cast_mon_sum2,0);
  1692.   
  1693.   spello(76,24,POSITION_STANDING, 9, LOW_IMMORTAL, LOW_IMMORTAL, 15,
  1694.      TAR_IGNORE, cast_mon_sum3,0);
  1695.   
  1696.   spello(77,24,POSITION_STANDING, 12, LOW_IMMORTAL, LOW_IMMORTAL, 17,
  1697.      TAR_IGNORE, cast_mon_sum4,0);
  1698.   
  1699.   spello(78,24,POSITION_STANDING, 15, LOW_IMMORTAL, LOW_IMMORTAL, 20,
  1700.      TAR_IGNORE, cast_mon_sum5,0);
  1701.   
  1702.   spello(79,24,POSITION_STANDING, 18, LOW_IMMORTAL, LOW_IMMORTAL, 22,
  1703.      TAR_IGNORE, cast_mon_sum6,0);
  1704.   
  1705.   spello(80,24,POSITION_STANDING, 22, LOW_IMMORTAL, LOW_IMMORTAL, 25,
  1706.      TAR_IGNORE, cast_mon_sum7,0);
  1707.   
  1708.   spello(81,24,POSITION_STANDING, 40, 45, 48, 40,
  1709.      TAR_SELF_ONLY | TAR_CHAR_ROOM, cast_fireshield,0);
  1710.   
  1711.   spello(82,12,POSITION_STANDING, 10, LOW_IMMORTAL, 12, 5,
  1712.      TAR_CHAR_ROOM | TAR_VIOLENT, cast_charm_monster,0);
  1713.   
  1714.   spello(83,12,POSITION_FIGHTING, 45, 7, 8, 9,
  1715.      TAR_CHAR_ROOM, cast_cure_serious, 14);
  1716.   
  1717.   spello(84,12,POSITION_FIGHTING, 45, 7, 8, 9,
  1718.      TAR_CHAR_ROOM | TAR_VIOLENT, cast_cause_serious, 14);
  1719.   
  1720.   spello(85,12,POSITION_STANDING, 6, 3, 4, 5,
  1721.      TAR_CHAR_ROOM, cast_refresh,0);
  1722.   
  1723.   spello(86,12,POSITION_FIGHTING, 20, 9, 14, 5,
  1724.      TAR_CHAR_ROOM, cast_second_wind,25);
  1725.   
  1726.   spello(87,12,POSITION_STANDING, LOW_IMMORTAL, 1, 12, 5,
  1727.      TAR_CHAR_ROOM, cast_turn,0);
  1728.   
  1729.   spello(88,24,POSITION_STANDING, 24, 23, LOW_IMMORTAL, 15,
  1730.      TAR_IGNORE, cast_succor,0);
  1731.   
  1732.   spello(89,12,POSITION_STANDING, 1, 2, 3,  5,
  1733.      TAR_IGNORE, cast_light,0);
  1734.   
  1735.   spello(90,24,POSITION_STANDING, 10, 26, 16, 10,
  1736.      TAR_IGNORE, cast_cont_light,0);
  1737.   
  1738.   spello(91,24,POSITION_STANDING, 4, 2, LOW_IMMORTAL, 15,
  1739.      TAR_CHAR_ROOM, cast_calm,0);
  1740.   
  1741.   spello(92,24,POSITION_STANDING, 26, LOW_IMMORTAL, LOW_IMMORTAL, 20,
  1742.      TAR_SELF_ONLY, cast_stone_skin,0);
  1743.   
  1744.   spello(93,24,POSITION_STANDING, 16, 13, 11, 30,
  1745.      TAR_IGNORE, cast_conjure_elemental,0);
  1746.   
  1747.   spello(94,24,POSITION_STANDING, LOW_IMMORTAL, 19, 24, 20,
  1748.      TAR_CHAR_ROOM, cast_true_seeing,0);
  1749.   
  1750.   spello(95,24,POSITION_STANDING, 8, LOW_IMMORTAL, LOW_IMMORTAL, 30,
  1751.      TAR_IGNORE, cast_minor_creation,0);
  1752.   
  1753.   spello(96,12,POSITION_STANDING, 5, 4, 1, 10,
  1754.      TAR_CHAR_ROOM | TAR_SELF_NONO | TAR_VIOLENT, cast_faerie_fire,0);
  1755.   
  1756.   spello(97,24,POSITION_STANDING, 16, 11, 10, 20,
  1757.      TAR_IGNORE, cast_faerie_fog,0);
  1758.   
  1759.   spello(98,24,POSITION_STANDING, 30, 29, LOW_IMMORTAL, 50,
  1760.      TAR_IGNORE, cast_cacaodemon,0);
  1761.   
  1762.   spello(99,12,POSITION_STANDING, 9, LOW_IMMORTAL, LOW_IMMORTAL, 10,
  1763.      TAR_IGNORE, cast_poly_self,0);
  1764.     
  1765.   spello(100,12,POSITION_FIGHTING, LOKI+1, LOKI+1, LOKI+1,
  1766.      200, TAR_IGNORE, cast_mana,0);
  1767.   
  1768.   spello( 101,12,POSITION_STANDING, LOW_IMMORTAL, 30, LOW_IMMORTAL, 30,
  1769.      TAR_CHAR_WORLD, cast_astral_walk,0);
  1770.   
  1771.   spello( 102,36,POSITION_STANDING, LOW_IMMORTAL, 36, LOW_IMMORTAL, 33,
  1772.      TAR_OBJ_ROOM, cast_resurrection,0);
  1773.  
  1774.   spello( 103,12,POSITION_STANDING, LOW_IMMORTAL, 24, LOW_IMMORTAL, 40,
  1775.      TAR_IGNORE, cast_heroes_feast,0);
  1776.  
  1777.   spello( 104,12,POSITION_STANDING, 24, LOW_IMMORTAL, 22, 30,
  1778.      TAR_IGNORE, cast_fly_group,0);
  1779.  
  1780.   spello(105, 250, POSITION_STANDING, LOKI+1, LOKI+1,
  1781.      LOKI+1, 200, TAR_IGNORE | TAR_VIOLENT, cast_dragon_breath,0);
  1782.  
  1783.   spello( 106,12,POSITION_FIGHTING, 11, LOW_IMMORTAL, LOW_IMMORTAL, 3,
  1784.      TAR_CHAR_ROOM, cast_web,60);
  1785.  
  1786.   spello( 107,12,POSITION_STANDING, 12, LOW_IMMORTAL, 7, 10,
  1787.      TAR_CHAR_ROOM, cast_minor_track,0);
  1788.  
  1789.   spello( 108,12,POSITION_STANDING, 20, LOW_IMMORTAL, 17, 20,
  1790.      TAR_CHAR_ROOM, cast_major_track,0);
  1791.  
  1792. /* new stuff */
  1793.  
  1794.   spello(109,24,POSITION_STANDING, IMMORTAL, 15, IMMORTAL, 30,
  1795.      TAR_IGNORE, cast_golem,0);
  1796.  
  1797.   spello(110,24,POSITION_STANDING, 2, IMMORTAL, IMMORTAL, 30,
  1798.      TAR_IGNORE, cast_familiar,0);
  1799.  
  1800.   spello(111,24,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 30, 30,
  1801.      TAR_IGNORE, cast_changestaff,0);
  1802.  
  1803.   spello(112,24,POSITION_FIGHTING, IMMORTAL, 31, IMMORTAL, 30,
  1804.      TAR_IGNORE | TAR_VIOLENT,  cast_holyword,80);
  1805.  
  1806.   spello(113,24,POSITION_FIGHTING, IMMORTAL, 31, IMMORTAL, 30,
  1807.      TAR_IGNORE | TAR_VIOLENT, cast_unholyword,80);
  1808.  
  1809.   spello(114,24,POSITION_FIGHTING, 23, IMMORTAL, IMMORTAL, 10,
  1810.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_pword_kill,40);
  1811.  
  1812.   spello(115,24,POSITION_FIGHTING, 16, IMMORTAL, IMMORTAL, 10,
  1813.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_pword_blind,20);
  1814.  
  1815.   spello(116,24,POSITION_FIGHTING, 25, IMMORTAL, 25, 30,
  1816.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_chain_lightn,80);
  1817.  
  1818.   spello(117,24,POSITION_FIGHTING, 4, IMMORTAL, IMMORTAL, 3,
  1819.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_scare,10);
  1820.  
  1821.   spello(118,24,POSITION_FIGHTING, LOW_IMMORTAL, 4, IMMORTAL, 5,
  1822.      TAR_CHAR_ROOM, cast_aid,10);
  1823.  
  1824.   spello(119,24,POSITION_FIGHTING, LOW_IMMORTAL, 1, IMMORTAL, 3,
  1825.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_command,30);
  1826.  
  1827.   spello(120, 12, POSITION_STANDING, IMMORTAL, IMMORTAL, 12, 20,
  1828.      TAR_IGNORE, cast_change_form, 0);
  1829.  
  1830.   spello(121,24,POSITION_FIGHTING, 34, IMMORTAL, IMMORTAL, 30,
  1831.      TAR_CHAR_ROOM | TAR_FIGHT_VICT |TAR_VIOLENT,cast_feeblemind,70);
  1832.  
  1833.   spello(122,12,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 3, 10,
  1834.      TAR_OBJ_INV, cast_shillelagh, 0);
  1835.  
  1836.   spello(123,12,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 4, 10,
  1837.      TAR_IGNORE ,cast_goodberry,0);
  1838.  
  1839.   spello(124,12,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 7, 10,
  1840.      TAR_IGNORE,cast_flame_blade,0);
  1841.  
  1842.   spello(125,24,POSITION_FIGHTING, LOW_IMMORTAL, IMMORTAL, 35, 20,
  1843.      TAR_CHAR_ROOM | TAR_SELF_NONO,cast_animal_growth,40);
  1844.  
  1845.   spello(126,24,POSITION_FIGHTING, LOW_IMMORTAL, IMMORTAL, 33, 20,
  1846.      TAR_CHAR_ROOM | TAR_SELF_NONO,cast_insect_growth,40);
  1847.  
  1848.   spello(127,36,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 45, 50,
  1849.      TAR_IGNORE,cast_creeping_death,0);
  1850.  
  1851.   spello(128,24,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 20, 10,
  1852.      TAR_IGNORE,cast_commune,0);
  1853.  
  1854.   spello(129,24,POSITION_STANDING, IMMORTAL, LOW_IMMORTAL, 15, 15,
  1855.      TAR_IGNORE, cast_animal_summon_1,0);
  1856.   spello(130,24,POSITION_STANDING, IMMORTAL, LOW_IMMORTAL, 20, 20,
  1857.      TAR_IGNORE, cast_animal_summon_2,0);
  1858.   spello(131,24,POSITION_STANDING, IMMORTAL, LOW_IMMORTAL, 25, 25,
  1859.      TAR_IGNORE, cast_animal_summon_3,0);
  1860.  
  1861.  
  1862.   spello(132,24,POSITION_STANDING, IMMORTAL, IMMORTAL, 35, 30,
  1863.      TAR_IGNORE, cast_fire_servant,0);
  1864.   spello(133,24,POSITION_STANDING, IMMORTAL, IMMORTAL, 36, 30,
  1865.      TAR_IGNORE, cast_earth_servant,0);
  1866.   spello(134,24,POSITION_STANDING, IMMORTAL, IMMORTAL, 37, 30,
  1867.      TAR_IGNORE, cast_water_servant,0);
  1868.   spello(135,24,POSITION_STANDING, IMMORTAL, IMMORTAL, 38, 30,
  1869.      TAR_IGNORE, cast_wind_servant,0);
  1870.  
  1871.   spello(136,36,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 39, 50,
  1872.      TAR_OBJ_ROOM, cast_reincarnate,0);
  1873.  
  1874.  
  1875.   spello(137,12,POSITION_STANDING, IMMORTAL, LOW_IMMORTAL, 17, 5,
  1876.      TAR_CHAR_ROOM | TAR_VIOLENT, cast_charm_veggie,0);
  1877.  
  1878.   spello(138,24,POSITION_FIGHTING, LOW_IMMORTAL, IMMORTAL, 20, 20,
  1879.      TAR_CHAR_ROOM | TAR_SELF_NONO,cast_veggie_growth,40);
  1880.  
  1881.   spello(139,24,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 15, 30,
  1882.      TAR_CHAR_ROOM | TAR_SELF_ONLY, cast_tree,0);
  1883.  
  1884.  
  1885.   spello(140,24,POSITION_STANDING, LOW_IMMORTAL, IMMORTAL, 31, 15,
  1886.      TAR_OBJ_INV | TAR_OBJ_ROOM, cast_animate_rock,0);
  1887.  
  1888.   spello( 141, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 8, 2,
  1889.      TAR_SELF_ONLY, cast_tree_travel, 0);
  1890.  
  1891.   spello( 142, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 10, 2,
  1892.      TAR_SELF_ONLY, cast_travelling, 0);
  1893.  
  1894.   spello( 143, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 5, 2,
  1895.      TAR_CHAR_ROOM | TAR_SELF_NONO, cast_animal_friendship, 0);
  1896.  
  1897.   spello( 144, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 11, 10,
  1898.      TAR_SELF_ONLY, cast_invis_to_animals, 0);
  1899.  
  1900.   spello( 145, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 6, 20,
  1901.      TAR_CHAR_ROOM, cast_slow_poison, 0);
  1902.  
  1903.   spello( 146, 12, POSITION_FIGHTING, LOW_IMMORTAL, LOW_IMMORTAL, 16, 20,
  1904.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_entangle, 0);
  1905.  
  1906.   spello( 147, 12, POSITION_FIGHTING, LOW_IMMORTAL, LOW_IMMORTAL, 8, 10,
  1907.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_snare, 0);
  1908.  
  1909.   spello( 148, 12, POSITION_SITTING, 10, LOW_IMMORTAL, IMMORTAL, 2,
  1910.      TAR_IGNORE, cast_gust_of_wind, 30);
  1911.  
  1912.   spello( 149, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 3, 5,
  1913.      TAR_CHAR_ROOM, cast_barkskin, 0);
  1914.  
  1915.   spello( 150, 12, POSITION_FIGHTING, LOW_IMMORTAL, LOW_IMMORTAL, 27, 15,
  1916.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_sunray, 30);
  1917.  
  1918.   spello( 151, 12, POSITION_FIGHTING, LOW_IMMORTAL, LOW_IMMORTAL, 19, 20,
  1919.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT | 
  1920.      TAR_OBJ_ROOM | TAR_OBJ_INV, cast_warp_weapon, 60);
  1921.  
  1922.   spello( 152, 12, POSITION_FIGHTING, LOW_IMMORTAL, LOW_IMMORTAL, 23, 30,
  1923.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_heat_stuff, 30);
  1924.  
  1925.   spello( 153, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 15, 10,
  1926.      TAR_SELF_ONLY, cast_find_traps, 0);
  1927.  
  1928.   spello( 154, 12, POSITION_FIGHTING, LOW_IMMORTAL, LOW_IMMORTAL, 22, 15,
  1929.      TAR_IGNORE, cast_firestorm, 30);
  1930.  
  1931.   spello( 155, 12, POSITION_STANDING, 23, IMMORTAL, IMMORTAL, 20, 
  1932.      TAR_CHAR_ROOM | TAR_VIOLENT, cast_haste, 0);
  1933.  
  1934.   spello( 156, 12, POSITION_STANDING, 19, IMMORTAL, IMMORTAL, 20, 
  1935.      TAR_CHAR_ROOM | TAR_VIOLENT, cast_slow, 0);
  1936.  
  1937.   spello(157,24,POSITION_STANDING, LOW_IMMORTAL, 3, 1, 10,
  1938.      TAR_IGNORE, cast_dust_devil,0);
  1939.  
  1940.   spello(158, 12, POSITION_FIGHTING, 9, IMMORTAL, IMMORTAL, 20,
  1941.      TAR_SELF_NONO| TAR_CHAR_ROOM | TAR_FIGHT_VICT, 
  1942.      cast_know_monster, 50);
  1943.  
  1944.   spello( 159, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 10, 20,
  1945.      TAR_OBJ_WORLD, cast_transport_via_plant, 0);
  1946.  
  1947.   spello( 160, 12, POSITION_STANDING, LOW_IMMORTAL, LOW_IMMORTAL, 7, 5,
  1948.      TAR_OBJ_ROOM, cast_speak_with_plants, 0);
  1949.  
  1950.   spello( 161, 12, POSITION_FIGHTING, 21, 23, 25, 30,
  1951.      TAR_CHAR_ROOM | TAR_FIGHT_VICT | TAR_VIOLENT, cast_silence, 100);
  1952.  
  1953.   spello( 162, 12, POSITION_STANDING, LOKI, LOKI, LOKI, 20,
  1954.      TAR_CHAR_WORLD, cast_sending, 0);
  1955.   spello( 163, 12, POSITION_STANDING, LOKI, LOKI, LOKI, 20,
  1956.      TAR_CHAR_WORLD, cast_teleport_wo_error, 0);
  1957.   spello( 164, 12, POSITION_STANDING, 43, LOKI, LOKI, 50,
  1958.      TAR_CHAR_WORLD, cast_portal, 0);
  1959.   spello( 165, 12, POSITION_STANDING, LOKI, LOKI, LOKI, 20,
  1960.      TAR_IGNORE, cast_dragon_ride, 0);
  1961.   spello( 166, 12, POSITION_STANDING, LOKI, LOKI, LOKI, 20,
  1962.      TAR_IGNORE, cast_mount, 0);
  1963.  
  1964.  
  1965.     
  1966.   spello(180,0,POSITION_STANDING,LOKI+1,LOKI+1,LOKI+1,200, 
  1967.      TAR_IGNORE, 0, 0);
  1968.   
  1969. }
  1970.  
  1971.  
  1972. void SpellWearOffSoon(int s, struct char_data *ch)
  1973. {
  1974.  
  1975.   if (s > MAX_SKILLS+10) 
  1976.     return;
  1977.  
  1978.   if (spell_wear_off_soon_msg[s] && *spell_wear_off_soon_msg[s]) {
  1979.     send_to_char(spell_wear_off_soon_msg[s], ch);
  1980.     send_to_char("\n\r", ch);
  1981.   }
  1982.  
  1983.   if (spell_wear_off_soon_room_msg[s] && *spell_wear_off_soon_room_msg[s]) {
  1984.     act(spell_wear_off_soon_room_msg[s], FALSE, ch, 0, 0, TO_ROOM);
  1985.   }
  1986.  
  1987. }
  1988.  
  1989.  
  1990. void SpellWearOff(int s, struct char_data *ch)
  1991. {
  1992.  
  1993.   if (s > MAX_SKILLS+10) 
  1994.     return;
  1995.  
  1996.   if (spell_wear_off_msg[s] && *spell_wear_off_msg[s]) {
  1997.     send_to_char(spell_wear_off_msg[s], ch);
  1998.     send_to_char("\n\r", ch);
  1999.   }
  2000.  
  2001.   if (spell_wear_off_room_msg[s] && *spell_wear_off_room_msg[s]) {
  2002.     act(spell_wear_off_room_msg[s], FALSE, ch, 0, 0, TO_ROOM);
  2003.   }
  2004.  
  2005.  
  2006.   if (s == SPELL_CHARM_PERSON || s == SPELL_CHARM_MONSTER) {
  2007.     check_decharm(ch);
  2008.   }
  2009.  
  2010.   if (s == SPELL_FLY) {
  2011.     check_falling(ch);
  2012.   }
  2013.  
  2014.   if (s == SPELL_WATER_BREATH) {
  2015.     check_drowning(ch);
  2016.   }
  2017.  
  2018. }
  2019.  
  2020. void check_decharm( struct char_data *ch)
  2021. {
  2022.   struct char_data *m;
  2023.  
  2024.   if (!ch->master) return;
  2025.  
  2026.   m = ch->master;
  2027.   stop_follower(ch);   /* stop following the master */
  2028.   REMOVE_BIT(ch->specials.act, ACT_SENTINEL);
  2029.   AddFeared( ch, m);
  2030.   do_flee(ch, "", 0);
  2031.  
  2032. }
  2033.  
  2034.  
  2035. int check_falling( struct char_data *ch)
  2036. {
  2037.   struct room_data *rp, *targ;
  2038.   int done, count, saved;
  2039.   char buf[256];
  2040.  
  2041.   if (IS_AFFECTED(ch, AFF_FLYING))
  2042.     return(FALSE);
  2043.  
  2044.   rp = real_roomp(ch->in_room);
  2045.   if (!rp) return(FALSE);
  2046.  
  2047.   if (rp->sector_type != SECT_AIR) 
  2048.     return(FALSE);
  2049.  
  2050.   if (ch->skills && number(1,101) < ch->skills[SKILL_SAFE_FALL].learned) {
  2051.     act("You manage to slow your fall, enough to stay alive..", 
  2052.     TRUE, ch, 0, 0, TO_CHAR);
  2053.     saved = TRUE;
  2054.   } else {
  2055.     act("The world spins, and you sky-dive out of control",
  2056.     TRUE, ch, 0, 0, TO_CHAR);
  2057.     saved = FALSE;
  2058.   }
  2059.  
  2060.   done = FALSE;
  2061.   count = 0;
  2062.  
  2063.   while (!done && count < 100) {
  2064.  
  2065. /*
  2066.   check for an exit down.
  2067.   if there is one, go through it.
  2068. */
  2069.     if (rp->dir_option[DOWN] && rp->dir_option[DOWN]->to_room > -1) {
  2070.       targ = real_roomp(rp->dir_option[DOWN]->to_room);
  2071.     } else {
  2072.       /*
  2073.     pretend that this is the smash room.
  2074.     */
  2075.       if (count > 1) {
  2076.  
  2077.     send_to_char("You are smashed into tiny pieces.\n\r", ch);
  2078.     act("$n smashes against the ground at high speed", 
  2079.         FALSE, ch, 0, 0, TO_ROOM);
  2080.     act("You are drenched with blood and gore", 
  2081.         FALSE,ch, 0, 0, TO_ROOM);
  2082.  
  2083. /*
  2084.   should damage all their stuff
  2085. */
  2086.     DamageAllStuff(ch, BLOW_DAMAGE);
  2087.  
  2088.     if (!IS_IMMORTAL(ch)) {
  2089.       GET_HIT(ch) = 0;
  2090.       sprintf(buf, "%s has fallen to death", GET_NAME(ch));
  2091.       log(buf);
  2092.     if (!ch->desc)
  2093.       GET_GOLD(ch) = 0;
  2094.       die(ch);
  2095.     }
  2096.     return(TRUE);
  2097.     
  2098.       } else {
  2099.  
  2100.     send_to_char("You land with a resounding THUMP!\n\r", ch);
  2101.     GET_HIT(ch) = 0;
  2102.     GET_POS(ch) = POSITION_STUNNED;
  2103.     act("$n lands with a resounding THUMP!", FALSE, ch, 0, 0, TO_ROOM);
  2104. /*
  2105.   should damage all their stuff
  2106. */
  2107.     DamageAllStuff(ch, BLOW_DAMAGE);
  2108.  
  2109.     return(TRUE);
  2110.  
  2111.       }
  2112.     }
  2113.  
  2114.     act("$n plunges towards oblivion", FALSE, ch, 0, 0, TO_ROOM);
  2115.     send_to_char("You plunge from the sky\n\r", ch);
  2116.     char_from_room(ch);
  2117.     char_to_room(ch, rp->dir_option[DOWN]->to_room);
  2118.     act("$n falls from the sky", FALSE, ch, 0, 0, TO_ROOM);
  2119.     count++;
  2120.  
  2121.     do_look(ch, "", 0);
  2122.  
  2123.     if (IS_SET(targ->room_flags, DEATH) && !IS_IMMORTAL(ch)) {
  2124.       NailThisSucker(ch);
  2125.       return(TRUE);
  2126.     }
  2127.  
  2128.     if (targ->sector_type != SECT_AIR) {
  2129.       /* do damage, or kill */
  2130.       if (count == 1) {
  2131.     send_to_char("You land with a resounding THUMP!\n\r", ch);
  2132.     GET_HIT(ch) = 0;
  2133.     GET_POS(ch) = POSITION_STUNNED;
  2134.     act("$n lands with a resounding THUMP!", FALSE, ch, 0, 0, TO_ROOM);
  2135. /*
  2136.   should damage all their stuff
  2137. */
  2138.     DamageAllStuff(ch, BLOW_DAMAGE);
  2139.  
  2140.     return(TRUE);
  2141.  
  2142.       } else if (!saved) {
  2143.         send_to_char("You are smashed into tiny pieces.\n\r", ch);
  2144.         if (targ->sector_type >= SECT_WATER_SWIM)
  2145.       act("$n is smashed to a pulp by $s impact with the water", 
  2146.         FALSE, ch, 0, 0, TO_ROOM);
  2147.         else 
  2148.       act("$n is smashed to a bloody pulp by $s impact with the ground", 
  2149.         FALSE, ch, 0, 0, TO_ROOM);
  2150.     act("You are drenched with blood and gore", FALSE,ch, 0, 0, TO_ROOM);
  2151.  
  2152. /*
  2153.   should damage all their stuff
  2154. */
  2155.     DamageAllStuff(ch, BLOW_DAMAGE);
  2156.  
  2157.     if (!IS_IMMORTAL(ch)) {
  2158.       GET_HIT(ch) = 0;
  2159.       sprintf(buf, "%s has fallen to death", GET_NAME(ch));
  2160.       log(buf);
  2161.     if (!ch->desc)
  2162.       GET_GOLD(ch) = 0;
  2163.       die(ch);
  2164.     }
  2165.     return(TRUE);
  2166.  
  2167.       } else {
  2168.     send_to_char("You land with a resounding THUMP!\n\r", ch);
  2169.     GET_HIT(ch) = 0;
  2170.     GET_POS(ch) = POSITION_STUNNED;
  2171.     act("$n lands with a resounding THUMP!", FALSE, ch, 0, 0, TO_ROOM);
  2172. /*
  2173.   should damage all their stuff
  2174. */
  2175.     DamageAllStuff(ch, BLOW_DAMAGE);
  2176.  
  2177.     return(TRUE);
  2178.     
  2179.       }
  2180.     } else {
  2181. /*
  2182.   time to try the next room
  2183. */
  2184.       rp = targ;
  2185.       targ = 0;
  2186.     }
  2187.   }  
  2188.  
  2189.   if (count >= 100) {
  2190.     log("Someone fucked up an air room.");
  2191.     char_from_room(ch);
  2192.     char_to_room(ch, 2);
  2193.     do_look(ch, "", 0);
  2194.     return(FALSE);
  2195.   }
  2196. }
  2197.  
  2198. void check_drowning( struct char_data *ch)
  2199. {
  2200.   struct room_data *rp;
  2201.   char buf[256];
  2202.  
  2203.   if (IS_AFFECTED(ch, AFF_WATERBREATH))
  2204.     return;
  2205.  
  2206.   rp = real_roomp(ch->in_room);
  2207.  
  2208.   if (!rp) return;
  2209.  
  2210.   if (rp->sector_type == SECT_UNDERWATER) {
  2211.       send_to_char("PANIC!  You're drowning!!!!!!", ch);
  2212.       GET_HIT(ch)-=number(1,30);
  2213.       GET_MOVE(ch) -= number(10,50);
  2214.       update_pos(ch);
  2215.       if (GET_HIT(ch) < -10) {
  2216.     sprintf(buf, "%s killed by drowning", GET_NAME(ch));
  2217.     log(buf);
  2218.     if (!ch->desc)
  2219.       GET_GOLD(ch) = 0;
  2220.     die(ch);
  2221.       }
  2222.    }
  2223. }
  2224.  
  2225.  
  2226. void check_falling_obj( struct obj_data *obj, int room)
  2227. {
  2228.   struct room_data *rp, *targ;
  2229.   int done, count;
  2230.  
  2231.   if (obj->in_room != room) {
  2232.     log("unusual object information in check_falling_obj");
  2233.     return;
  2234.   }
  2235.  
  2236.   rp = real_roomp(room);
  2237.   if (!rp) return;
  2238.  
  2239.   if (rp->sector_type != SECT_AIR) 
  2240.     return;
  2241.  
  2242.   done = FALSE;
  2243.   count = 0;
  2244.  
  2245.   while (!done && count < 100) {
  2246.  
  2247.     if (rp->dir_option[DOWN] && rp->dir_option[DOWN]->to_room > -1) {
  2248.       targ = real_roomp(rp->dir_option[DOWN]->to_room);
  2249.     } else {
  2250.       /*
  2251.     pretend that this is the smash room.
  2252.     */
  2253.       if (count > 1) {
  2254.  
  2255.     if (rp->people) {
  2256.       act("$p smashes against the ground at high speed", 
  2257.           FALSE, rp->people, obj, 0, TO_ROOM);
  2258.       act("$p smashes against the ground at high speed", 
  2259.           FALSE, rp->people, obj, 0, TO_CHAR);
  2260.     }
  2261.     return;
  2262.  
  2263.       } else {
  2264.  
  2265.     if (rp->people) {
  2266.       act("$p lands with a loud THUMP!", 
  2267.           FALSE, rp->people, obj, 0, TO_ROOM);
  2268.       act("$p lands with a loud THUMP!", 
  2269.           FALSE, rp->people, obj, 0, TO_CHAR);
  2270.     }
  2271.     return;
  2272.  
  2273.       }
  2274.     }
  2275.  
  2276.     if (rp->people) { /* have to reference a person */
  2277.       act("$p falls out of sight", FALSE, rp->people, obj, 0, TO_ROOM);
  2278.       act("$p falls out of sight", FALSE, rp->people, obj, 0, TO_CHAR);
  2279.     }
  2280.     obj_from_room(obj);
  2281.     obj_to_room(obj, rp->dir_option[DOWN]->to_room);
  2282.     if (targ->people) {
  2283.       act("$p falls from the sky", FALSE, targ->people, obj, 0, TO_ROOM);
  2284.       act("$p falls from the sky", FALSE, targ->people, obj, 0, TO_CHAR);
  2285.     }
  2286.     count++;
  2287.  
  2288.     if (targ->sector_type != SECT_AIR) {
  2289.       if (count == 1) {
  2290.     if (targ->people) {
  2291.       act("$p lands with a loud THUMP!", FALSE, targ->people, obj, 0, TO_ROOM);
  2292.       act("$p lands with a loud THUMP!", FALSE, targ->people, obj, 0, TO_CHAR);
  2293.     }
  2294.     return;
  2295.       } else {
  2296.     if (targ->people) {
  2297.       if (targ->sector_type >= SECT_WATER_SWIM){      
  2298.         act("$p smashes against the water at high speed", 
  2299.         FALSE, targ->people, obj, 0, TO_ROOM);
  2300.         act("$p smashes against the water at high speed", 
  2301.         FALSE, targ->people, obj, 0, TO_CHAR);
  2302.       } else {
  2303.         act("$p smashes against the ground at high speed", 
  2304.         FALSE, targ->people, obj, 0, TO_ROOM);
  2305.         act("$p smashes against the ground at high speed", 
  2306.         FALSE, targ->people, obj, 0, TO_CHAR);
  2307.       }
  2308.     }
  2309.     return;
  2310.  
  2311.       }
  2312.     } else {
  2313. /*
  2314.   time to try the next room
  2315. */
  2316.       rp = targ;
  2317.       targ = 0;
  2318.     }
  2319.   }  
  2320.  
  2321.   if (count >= 100) {
  2322.     log("Someone fucked up an air room.");
  2323.     obj_from_room(obj);
  2324.     obj_to_room(obj, 2);
  2325.     return;
  2326.   }
  2327. }
  2328.  
  2329. int check_nature( struct char_data *i)
  2330. {
  2331.  
  2332.   if (check_falling(i)) {
  2333.     return(TRUE);
  2334.   }
  2335.   check_drowning(i);
  2336.  
  2337. }
  2338.